<!--
    Vieb - Vim Inspired Electron Browser
    Copyright (C) 2019-2025 Jelmer van Arnhem

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
-->
<!DOCTYPE html>
<html>
<head>
    <link id="default-styling" href="../colors/default.css" rel="stylesheet" type="text/css">
    <title>Help</title>
    <meta http-equiv="Content-Security-Policy" content="img-src file://*; object-src 'none'; style-src 'unsafe-inline' file://*; script-src 'none'; default-src 'none'">
    <link rel="shortcut icon" type="image/svg+xml" href="../img/vieb.svg">
</head>
<body class="specialpage" id="helppage">
    <div class="header">
        <div>
            <img src="../img/vieb.svg">
            <div>Welcome to Vieb</div>
        </div>
    </div>
    <main>
        <h1 id="intro">Intro</h1>
        Welcome to Vieb's official, complete and offline documentation. Vieb is short for "Vim Inspired Electron Browser" and can be found on <a href="https://vieb.dev">vieb.dev</a> or <a href="https://github.com/Jelmerro/Vieb">Github</a>. These are the essential keys you need for basic use:
        <ul>
            <li><kbd>&lt;Esc&gt;</kbd> - Back to <a class="normal" href="#normal">normal mode</a>, this is where you want to be in most of the time</li>
            <li><kbd>j</kbd> and <kbd>k</kbd> - Scroll the page a bit or <a href="#scrolling">scroll further</a> with <kbd>&lt;C-d&gt;</kbd> and <kbd>&lt;C-u&gt;</kbd></li>
            <li><kbd>:</kbd> - Switch to <a class="command" href="#command">command mode</a> to run <a href="#commands">commands</a>, set <a href="#mappings">mappings</a> or change <a href="#settings">settings</a></li>
            <li><kbd>e</kbd> - Switch to <a class="explore" href="#explore">explore mode</a> to navigate to websites or <a href="#searchengine">search</a> the web</li>
            <li><kbd>f</kbd> - Switch to <a class="follow" href="#follow">follow mode</a> to click buttons or links based on keys</li>
            <li><kbd>/</kbd> - Switch to <a class="search" href="#search">search mode</a> to find text in the page, next/previous with <kbd>n</kbd> and <kbd>N</kbd></li>
            <li><kbd>v</kbd> - Switch to <a class="pointer" href="#pointer">pointer mode</a> to hover, download images, copy urls etc.<ul>
                <li><kbd>v</kbd> - Then switch to <a class="visual" href="#visual">visual mode</a> to select and copy text</li>
            </ul></li>
            <li>Open <a href="#:tabnew">new tabs</a> with <kbd>t</kbd>, <a href="#:close">close them</a> with <kbd>d</kbd>, <a href="#action.nextTab">switch</a> between <a href="#action.previousTab">tabs</a> with <kbd>w</kbd> and <kbd>b</kbd></li>
            <li><a href="#action.zoomIn">Zoom in</a> and <a href="#action.zoomOut">out</a> with <kbd>+</kbd> and <kbd>-</kbd>, <a href="#action.zoomReset">reset zoom</a> with <kbd>&lt;C-0&gt;</kbd>, go <a href="#action.backInHistory">backward</a>/<a href="#action.forwardInHistory">forward</a> with <kbd>H</kbd>/<kbd>L</kbd>
            <li><a href="#action.reopenTab">Reopen tabs</a> with <kbd>u</kbd>, <a href="#action.refreshTab">refresh</a> with <kbd>r</kbd>, open <a href="#:help">help</a> with <kbd>&lt;F1&gt;</kbd> and <a href="#:quit">quit</a> with <kbd>ZZ</kbd> or <span class="command-block">:q</span></li>
        </ul>
        Vieb is separated into different modes, which have different keyboard mappings. You can see the current mode at all times in the navbar, next to the url. All mappings listed above assume the default mappings and that you are in <a class="normal" href="#normal">normal mode</a>. You can list all of Vieb's current keyboard mappings with <span class="command-block">:map!</span> as explained in the <a href="#:map">:map</a> paragraph. It's also an option to use your <a href="#mouse">mouse</a>, but you can do everything without it.
        <h2>Help structure</h2>
        This documentation offers you functional documentation regarding all of Vieb's features. These are the main components of Vieb and thus the chapters of this help page:
        <ul>
            <li><a href="#commands">Commands</a> - All built-in commands, including commands to create custom commands</li>
            <li><a href="#settings">Settings</a> - All settings, including defaults and possible values</li>
            <li><a href="#actions">Actions</a> - All actions that can be executed by using the keyboard</li>
        </ul>
        If you want to find out what a certain command, setting or action means, you can call the help command with its name as an argument, for example: <span class="command-block nowrap">:help toSearchMode</span> or <span class="command-block nowrap">:help mappings</span>. You can also search help for a specific key combination such as <span class="command-block nowrap">:help gg</span>. If you have previously used a different browser (such as Firefox or qutebrowser), you might want to check out the <a href="#examples">examples</a> to configure Vieb as close as possible to them. For any kind of help or suggestions, please check out the <a href="https://github.com/Jelmerro/Vieb">Github repository</a>, <a href="https://github.com/Jelmerro/Vieb/discussions">Github discussions</a>, the <a href="https://matrix.to/#/#vieb:matrix.org">Matrix space</a>, <a href="https://t.me/vieb_general">Telegram</a> or the <a href="https://vieb.dev">vieb.dev homepage</a>.
        <h2>Cheatsheet</h2>
        In the image below, you can see an overview of all default keybindings and basic functionality of Vieb. While it does not substitute reading the help page, it can be an excellent starting point to learn all the different mappings.
        <a href="../img/cheatsheet.png"><img class="cheatsheet" src="../img/cheatsheet.png"></a>
        <h1 id="commands">Commands</h1>
        Commands can be used for various additional features and configuration. Entering commands is done by switching to <a class="command" href="#command">command mode</a> and then typing text. The command can be executed with <a href="#action.useEnteredData">action.useEnteredData</a>. This chapter will list all Vieb's commands, including a list of examples and the mappings that use the listed command. It's also possible to add custom commands using <a href="#:command">:command</a> with the name and actions as the arguments. If there is only a single command that starts with the entered text, that command will be run, for example: "mkv" is enough to run the <a href="#:mkviebrc">:mkviebrc</a> command.
        <h2 id="commandsyntax">Command syntax</h2>
        All commands follow a similar syntax. The basis of each command is a command name, which usually only consists of latin characters, as it does not allow special characters, though Asian characters and such are allowed. After choosing a command name, each argument is separated by spaces. Which arguments are supported is different for every command, some don't support any. Arguments with spaces or singles quotes can be escaped by using double quotes wrapped around it, double quotes can be escaped either within single quotes or within double quotes with a backslash in front. The <a href="#:set">:set</a> command only supports double quotes, as all setting values are supposed to be valid JSON. A command may also be prefixed with colons or spaces, which will be ignored. You can also prefix a command with "!" to run a system command, instead of a Vieb command. Finally you can prefix some Vieb commands with a range, just like in Vim. The full list of commands can be found right below the explanation of the ranges, and fills the rest of the Commands chapter. Each command has example usage, lists supported arguments and contains a description below the examples. You can skip the ranges for now and jump straight to <a href="#settingcommands">settingcommands</a> if you are new to Vieb/Vim and you are reading this help from top to bottom.
        <h3 id="ranges">Ranges</h3>
        Ranges are similar to <a href="https://vimhelp.org/cmdline.txt.html#cmdline-ranges">Vim's ranges</a>, but instead of line numbers we refer to tab indexes. While ranges are powerful, they are not essential for using Vieb. If you have never heard of them, it might be better to skip to the settings commands section below. Range indexes start at 0 and the upper limit depends on the amount of tabs, similar to buffer-like commands such as <a href="#:buffer">:buffer</a>. A range can be a single tab index, or refer to multiple, by separating the two indexes with a comma. You can also use "^" to refer to the first tab, "." to refer to the current tab and "$" to refer to the last tab. All numbers or characters can optionally be followed with "+x" or "-x" where "x" is a number, to offset the number or character specified as if it were calculated. You can also give a range of just "%" to apply to all tabs. For example, "0,2close" will close the first, second and third tab (from index 0 to 2), while "%close" will close them all. Not all commands support ranges, they will have a badge "Supports ranges" if they support it, most of these commands are buffer-like commands, but you can also use it to <a href="#:hardcopy">print</a> more than one page at a time. It's also possible to search for pages with ranges, this can be done by wrapping the search in slashes. This example will print the first page matching Github in its url or title:
        <span class="command-block">:/github/hardcopy</span>
        As explained before, you can also supply a start and end index, but both of these can also be found with a search and be incremented/decreased with calculations, for example:
        <span class="command-block">:/github/+1,/help/-1mute</span>
        This command will toggle mute for all tabs after the one matching Github and before the one matching help, which can be any number of tabs. It's also possible to supply one global search to execute a range supporting command on every tab matching the search with "g", which can also be combined with a case-insensitivity flag "i":
        <span class="command-block">:gi/vieb/pin</span>
        This command will pin of all tabs matching "vieb" in the title or url, regardless of casing. You can also use "i" and "g" on their own, but global searches cannot be combined with and end index, while "i" can. To only search in the title or the url, you can use the "t" and "u" flags in the same way. There are also flags to only search for suspended tabs with "z", only real unsuspended tabs with "r", audio/media playing tabs specifically with "a", silent tabs not playing audio/media currently with "s", pinned tabs with "p" and non-pinned normal tabs with "n". Finally, you can also not combine calculations such as "+2" with the "g" flag, because all matching tabs will have the command executed, instead of only the first match (optionally with a calculation part).
        <h2 id="settingcommands">Setting commands</h2>
        Commands in this paragraph are for reading, changing or resetting the settings of Vieb. These commands only change the settings for the current session, unless the <a href="#:mkviebrc">:mkviebrc</a> command is run to write the settings back to the <a href="#viebrc">viebrc</a> file.
        <h3 id=":set">:set</h3>
        <ul>
            <li><span class="command-block">:s</span> - List all modified settings</li>
            <li><span class="command-block">:set adblocker? mouse?</span> - Read multiple settings</li>
            <li><span class="command-block">:s guifontsize=24 guifontsize?</span> - Write and read the guifontsize setting</li>
            <li><span class="command-block">:set nospell ignorecase!</span> - Disable spellchecking and toggle case-sensitive search</li>
            <li><span class="command-block">:s all&amp;</span> - Reset all setting to Vieb's default</li>
            <li><span class="command-block">:set searchengine searchengine&amp;</span> - List the current searchengine setting and reset it afterwards</li>
        </ul>
        The set command can be run with any number of arguments and is used to read, modify or reset any setting of Vieb. Without any arguments, the set command will list all the modified settings. To also list the default settings, you should run <span class="command-block">:set all?</span>. Every argument of the set command is parsed separately, which allows you to read, write or reset multiple settings at once, in any order. For a list of settings, see the <a href="#settings">Settings</a> chapter. The set command has very high compatibility with Vim, which is why some of its features might be confusing if you are not familiar with it. There are many ways to modify, read or write a setting, most of which are determined by the type of setting. For example, booleans can only be set or reset, while number settings can be set to a value or be multiplied/subtracted. String settings can be appended with additional text as well. To find out more about the different setting names, see the <a href="#settings">Settings</a> chapter, or find help for a specific setting with <span class="command-block">:help guifontsize</span> for example. Below is a list of all the different ways to invoke the set command, and to which type of values they apply. The name 'example' is not an actual setting, but should be replaced with a setting of the right type for the command to work:
        <h4>Shared for all type of settings</h4>
        These commands work the same for all settings regardless of type.
        <ul>
            <li><span class="command-block">:set example?</span> - Read the value of any type of setting</li>
            <li><span class="command-block">:set example=value</span> - Set any type of setting to a specific value</li>
            <li><span class="command-block">:set example:value</span> - Set any type of setting to a specific value</li>
            <li><span class="command-block">:set example&amp;</span> - Reset any type of setting to Vieb's default value</li>
            <li><span class="command-block">:set example!value1|value2</span> - Rotate between multiple values (will use value2 if value1 is currently set and use value1 if not, can be repeated to keep rotating, even with more than 2 values)</li>
        </ul>
        For any set argument you can wrap the value in double quotes to allow spaces and single quotes to be used. Double quotes always need to be escaped within matching double quotes, like so: <span class="command-block">:set example="example's cool value that includes \" in there"</span>. In general, if it is valid JSON it is valid as a setting value, though other constraints may apply that limit the type or accepted values.
        <h4 id="boolean">Boolean</h4>
        These type of settings can be turned on or off. In Vim, these are also known as toggles, while in most programming languages they are called booleans.
        <ul>
            <li><span class="command-block">:set example</span> - Set or enable a boolean</li>
            <li><span class="command-block">:set noexample</span> - Reset or disable a boolean</li>
            <li><span class="command-block">:set invexample</span> - Toggle the value of a boolean</li>
            <li><span class="command-block">:set example!</span> - Toggle the value of a boolean</li>
        </ul>
        <h4 id="number">Number</h4>
        These type of settings accept a number. Most of the number settings only accept a specific range, usually just positive numbers. The valid numbers for a particular setting are explained the help of each setting separately.
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of a number</li>
            <li><span class="command-block">:set noexample</span> - Set the number value to 0.</li>
            <li><span class="command-block">:set example+=value</span> - Increment a number with the value</li>
            <li><span class="command-block">:set example-=value</span> - Subtract a number with the value</li>
            <li><span class="command-block">:set example^=value</span> - Multiply a number with the value</li>
        </ul>
        <h4 id="string">String</h4>
        These type of settings accept any kind of text, sometimes with additional restrictions. For example, some string setting values must be a valid url, or be of the <a href="#interval">interval</a> type. Limitations of the string type are explained in the help of each setting separately.
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of a string</li>
            <li><span class="command-block">:set example+=value</span> - Append the value to the string</li>
            <li><span class="command-block">:set example-=value</span> - Remove the value from the string</li>
            <li><span class="command-block">:set example^=value</span> - Prepend the value to the string</li>
        </ul>
        <h4 id="enum">Enum</h4>
        These type of settings accept only specific values, but are otherwise identical to strings. An example is the <a href="#permissioncamera">permissioncamera</a> setting, which can only be set to "block", "ask" or "allow" (default is "block"). These type of settings, can also be rotated by suffixing an exclamation mark, similar to toggling boolean values.
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of an enum</li>
            <li><span class="command-block">:set example!</span> - Rotate the value of an enum to the next valid value</li>
        </ul>
        <h4 id="array">Array</h4>
        These type of settings accept a comma separated string, or actual Arrays/Objects using JSON. It can be set directly, just like a string, but can also be appended or modified per entry. Some lists that are comma-separated have nested lists that are separated by tildes, though you don't need to worry about commas if you use the Array or Object syntax.
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of the array.</li>
            <li><span class="command-block">:set noexample</span> - Empty the array.</li>
            <li><span class="command-block">:set example+=value</span> - Append a single value to the array.</li>
            <li><span class="command-block">:set example-=value</span> - Remove a single value from the array, priority for exact matches in the array for "value", if not found, it will remove any matches up to the first "~" in each value of the array.</li>
            <li><span class="command-block">:set example^=value</span> - Prepend a single value to the array.</li>
            <li><span class="command-block">:set example=["value1", "value2"]</span> - Set to the array of values, equal to "value1,value2", but with support for commas.</li>
            <li><span class="command-block">:set example=[["value1", "optional_options"], ["value2"]]</span> - Set to the array of values, equal to "value1~optional_options,value2", but with support for commas.</li>
            <li><span class="command-block">:set example={"value1": "optional_options", "value2": ""}</span> - Same as above.</li>
            <li><span class="command-block">:set example+=["value1", "value2"]</span> - Append multiple values to the array.</li>
            <li><span class="command-block">:set example+=[["value1", "optional_options"], ["value2", ""]]</span> - Append multiple values to the array, equal to "value1~optional_options,value2~", but with support for commas.</li>
            <li><span class="command-block">:set example+={"value1": "optional_options", "value2": ""}</span> - Same as above.</li>
            <li><span class="command-block">:set example-=["value1", "value2"]</span> - Remove multiple values from the array.</li>
            <li><span class="command-block">:set example-=[["value1", "optional_options"], ["value2", ""]]</span> - Remove multiple values from the array, equal to "value1~optional_options,value2~", but with support for commas, priority for exact matches in the array for each "value", if not found, it will remove any matches up to the first "~" in each value of the array.</li>
            <li><span class="command-block">:set example-={"value1": "optional_options", "value2": ""}</span> - Same as above.</li>
            <li><span class="command-block">:set example^=["value1", "value2"]</span> - Prepend multiple values to the array.</li>
            <li><span class="command-block">:set example^=[["value1", "optional_options"], ["value2", ""]]</span> - Prepend multiple values to the array, equal to "value1~optional_options,value2~", but with support for commas..</li>
            <li><span class="command-block">:set example^={"value1": "optional_options", "value2": ""}</span> - Same as above.</li>
        </ul>
        <h4 id="object">Object</h4>
        These type of settings accept a comma separated string, with each entry being tilde separated, or actual Arrays/Objects using JSON. It can be set directly, like a string, but can also be appended or modified per entry. The Object syntax is preferred as you don't need to worry about the commas and tildes separating the entries.
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of an object.</li>
            <li><span class="command-block">:set noexample</span> - Empty the object.</li>
            <li><span class="command-block">:set example+=key~value</span> - Append a single value to the object, existing keys are replaced with the new value.</li>
            <li><span class="command-block">:set example-=key~value</span> - Remove a single entry from the object, priority for exact matches in the object for "key~value", if not found, it will remove any matches for just the key. For example, for <a href="#searchwords">searchwords</a>, this allows you to remove a searchword from the object with just the prefix of the searchword (instead of typing "prefix~searchurl" in full).</li>
            <li><span class="command-block">:set example^=key~value</span> - Reserved, but currently unused.</li>
            <li><span class="command-block">:set example={"key1": "value1", "key2": "value2"}</span> - Set to an object, equal to "key1~value1,key2~value2", but with support for commas and tildes.</li>
            <li><span class="command-block">:set example=[["key1", "value1"], ["key2", "value2"]]</span> - Same as above.</li>
            <li><span class="command-block">:set example+={"key1": "value1", "key2": "value2"}</span> - Append multiple entries to an object, equal to "key1~value1,key2~value2", but with support for commas and tildes, existing keys are replaced with new values.</li>
            <li><span class="command-block">:set example+=[["key1", "value1"], ["key2", "value2"]]</span> - Same as above.</li>
            <li><span class="command-block">:set example-={"key1": "value1", "key2": "value2"}</span> - Remove multiple entries from an object, equal to "key1~value1,key2~value2", but with support for commas and tildes, priority for exact matches in the object for "key~value", if not found, it will remove any matches for just the key. For example, for <a href="#searchwords">searchwords</a>, this allows you to remove a searchword from the object with just the prefix of the searchword (instead of typing "prefix~searchurl" in full).</li>
            <li><span class="command-block">:set example-=[["key1", "value1"], ["key2", "value2"]]</span> - Same as above.</li>
            <li><span class="command-block">:set example^={"key1": "value1", "key2": "value2"}</span> - Reserved, but currently unused.</li>
            <li><span class="command-block">:set example^=[["key1", "value1"], ["key2", "value2"]]</span> - Same as above.</li>
        </ul>
        <h4 id="interval">Interval</h4>
        These type of settings accept a time interval. A time interval consists of a number followed by a time unit, for example 1day or 3months. The number can be any valid positive number, while the unit can be any of: second, minute, hour, day, month or year. The unit can optionally be followed by a plural "s", such as seconds or days. These type of settings have no special commands, besides the shared ones and the plain read option:
        <ul>
            <li><span class="command-block">:set example</span> - Read the value of an interval</li>
        </ul>
        <h3 id=":reloadconfig">:reloadconfig</h3>
        <ul>
            <li><span class="command-block">:reloadconfig</span> - Reload all viebrc commands</li>
        </ul>
        This command will reload the <a href="#viebrc">viebrc</a> files, in order. This is not the same as resetting all settings to Vieb's default, which can be done with <span class="command-block">:set all&amp;</span>. Both the reloadconfig and set command only modify the settings for the current session, unless the changes are written back to the viebrc with the <a href="#:mkviebrc">:mkviebrc</a> command. The reloadconfig command does not undo custom settings, mappings and commands, but does overwrite them if they are defined in the viebrc. Settings that have been changed using the set command at runtime that are not changed in the viebrc will therefore not be changed when running this command. To reset to the startup state without actually restarting Vieb (which you can do using the <a href="#:restart">:restart</a> command):
        <ul>
            <li>Remove all custom mappings with <span class="command-block">:mapclear</span></li>
            <li>Reset all settings with <span class="command-block">:set all&amp;</span></li>
            <li>Run <span class="command-block">:comclear</span> to remove all custom commands</li>
            <li>Switch back to the default <a href="#:colorscheme">:colorscheme</a> with <span class="command-block">:colorscheme default</span></li>
            <li>Finally run the <span class="command-block">:reloadconfig</span> command to run all viebrc commands</li>
        </ul>
        Of course it's also possible to make a mapping or custom command to do this for you.
        <h3 id=":restart">:restart</h3>
        <ul>
            <li><span class="command-block">:restart</span> - Restart Vieb</li>
        </ul>
        This command will restart Vieb. It is functionally equivalent to running the <a href="#:quitall">:quitall</a> command and then starting Vieb again.
        <h3 id=":mkviebrc">:mkviebrc</h3>
        <ul>
            <li><span class="command-block">:mkviebrc</span> - Write all modified settings, custom mappings and custom commands to disk</li>
            <li><span class="command-block">:mkviebrc full</span> - Write all settings (with defaults), custom mappings and custom commands to disk</li>
        </ul>
        This command can be used to write all runtime <a href="#settings">settings</a>, <a href="#:map">keyboard mappings</a> and <a href="#:command">custom commands</a> back to the <a href="#viebrc">viebrc</a> file located in Vieb's <a href="#datafolder">datafolder</a>. If the "--config-file" startup argument is present, only this viebrc will be used, and it will also be the destination of this mkviebrc command. The <a href=":colorscheme">colorscheme</a> is also written if it was changed or if "full" is provided.
        <h3 id=":scriptnames">:scriptnames</h3>
        <ul>
            <li><span class="command-block">:scriptnames</span> - List all the viebrc config files loaded on startup</li>
            <li><span class="command-block">:scriptnames!</span> - List every file that was either loaded on startup or sourced by startup configs</li>
            <li><span class="command-block">:scriptnames! 2</span> - Edit the 2nd script in the list of config files using the editor set by <a href="#vimcommand">vimcommand</a></li>
        </ul>
        With the scriptnames command you can display a list of <a href="#viebrc">viebrc</a> script files that were loaded on startup. You can customize which config files get loaded on startup using ENV variables or startup arguments, run "vieb --help" for details or read about the <a href="#viebrc">viebrc</a>. The list of scripts returned by this command will not change when sourcing new scripts with <a href="#:source">:source</a>, unless appended by "!", in which case it will return sourced scripts as well. Only files which were loaded on startup will be used when running <a href="#:reloadconfig">:reloadconfig</a>, unless those files also contain source commands. From the list of scripts returned by <span class="command-block">scriptnames!</span> you can directly edit a script by appending the index of the script in the list (starting at 1). For example, running <span class="command-block">:scriptnames! 1</span> will edit the config file that was loaded first with the editor configured by <a href="#vimcommand">vimcommand</a>.
        <h3 id=":source">:source</h3>
        <ul>
            <li><span class="command-block">:source ~/extra_vieb_config</span> - Execute the commands from "extra_vieb_config" in the home directory</li>
            <li><span class="command-block">:source ./mappings</span> - Execute the commands of the relative "mappings" file from another config file (relative paths are only supported from other configs)</li>
        </ul>
        Using the source command, you can load additional config files. This can be done at runtime by providing an absolute path, in which case the file will just be parsed once to run every line as a command. You can also run the source command inside <a href="#viebrc">viebrc</a> files to load other config files relative to them (or with an absolute path). Only files which are sourced by other files will be listed in the <a href="#:scriptnames">:scriptnames</a> command output, user invocations of source are one-time only and also won't be loaded when executing <a href="#:reloadconfig">:reloadconfig</a>.
        <h2 id="specialpages">Special pages</h2>
        Some commands are used to open special pages. This help page is one of them. In this paragraph all of them are listed. Unlike other pages, which are mostly websites that can only be styled with <a href="#userstyle">userstyle</a>, these are built-in pages of Vieb that can also be styled by changing the <a href="#colorscheme">colorscheme</a>. These pages are a core part of Vieb and do not require internet to work, similar to viewing local files. You can open them either by navigation to "vieb://" followed by the page name, or using the commands below. When using these commands, they will be opened in a new tab, unless the value of <a href="#replacespecial">replacespecial</a> determines that the newly opened special page should replace the current tab, which is by default done if you are currently viewing any of the special pages already. You can choose to open the special page in a new tab everytime by appending a "!" to the commmand, such as "version!".
        <h3 id=":version">:version</h3>
        <ul>
            <li><span class="command-block">:version</span> - Open the version information page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:version!</span> - Open the version information page in a new tab regardless of settings</li>
            <li><span class="command-block">:v</span> - Open the version information page</li>
        </ul>
        This command will open the version information page, located at "vieb://version". On this page, you will find information about the current Vieb version, along with the Electron and Chromium version this release is based on. Finally, there is also a button to check for updates. It is recommended to check for updates at least once a month, you can also subscribe to the <a href="https://github.com/Jelmerro/Vieb">Github repository</a> to be notified of updates, check out the official <a href="https://matrix.to/#/#vieb:matrix.org">Matrix space</a> and its <a href="https://matrix.to/#/#vieb-announcements:matrix.org">announcements chat</a>, or visit the <a href="https://t.me/vieb_announcements">Telegram announcements</a> and <a href="https://t.me/vieb_general">the general chat on Telegram</a>.
        <h3 id=":help">:help</h3>
        <ul>
            <li><span class="command-block">:help</span> - Open this current help page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:help!</span> - Open the help page in a new tab regardless of settings</li>
            <li><span class="command-block">:h settings</span> - Open the help page at the settings chapter</li>
            <li><span class="command-block">:h toExploreMode</span> - Open the help page at toExploreMode action</li>
            <li><span class="command-block">:h :quit</span> - Open the help page at the quit command</li>
            <li><span class="command-block">:h gg</span> - Open the help page at the first action mapped to the "gg" keys for any mode</li>
            <li><span class="command-block">:h v_w</span> - Open the help page at the first action mapped to the "w" key for <a class="visual" href="#visual">visual mode</a></li>
            <li><span class="command-block">:h! gf</span> - Open the help page at the first action mapped to the "gf" keys for any mode in a new tab regardless of settings</li>
        </ul>
        This command will open the help page, located at "vieb://help". This is the current page you are on, and describes all the functionality of Vieb. A single optional argument can be included in the help command, which should refer to a section of the help page. This section can be the name of an action, a command, a set of keys or any of the chapters and paragraphs. When a set of keys is given (which are also suggested if <a href="#suggestcommands">suggestcommands</a> is not disabled), those keys will be searched if they contain an action or command, if they do, that action/command is navigated to by the help command. In short, you can search for any mapped sequence of keys and open the help of the first action/command those keys are mapped to. You can also prefix your search for mappings with a mode key and an underscore, such as "n_", "i_" or "c_", which will only search for keys mapped in that particular mode and select the right action/command based on that. This method of search is limited to finding the first match, as it's not possible to scroll to two places at once, if you want more details you can list the functionality for a set of keys with <span class="command-block nowrap">:map! d</span>, where "d" is the example key to search for. This will list all mappings for the provided keys, after which you can search for its mapped actions or commands using the help command: <span class="command-block nowrap">:help :close</span>. This method also allows you to specify a particular mode to search for keys, by prefixing the <a href="#:map">:map</a> command with a mode character, such as <span class="command-block nowrap">:nmap!</span> or <span class="command-block nowrap">:vmap!</span>. The keys argument of the help command is basically a single command version of finding the mapping of some keys with the map commands and then running the help for the first action or command it finds.
        <h3 id=":history">:history</h3>
        <ul>
            <li><span class="command-block">:history</span> - Open the history page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:history!</span> - Open the history page in a new tab</li>
        </ul>
        With this command you will be navigated to the history page, located at "vieb://history". On this page you will be presented with a list of all your local browsing history, sorted by date. This page allows you to remove individual site visits from your history or remove all the history based on a filter. The browsing history is only stored in Vieb's <a href="#datafolder">datafolder</a> in a JSON file named "hist". You can customize the amount of entries that should be shown using <a href="#historyperpage">historyperpage</a> or the input on the history page itself. To disable new visits from being stored, see the <a href="#storenewvisits">storenewvisits</a> setting. This setting does not affect the history of previously closed tabs or the download history. It is also possible to disable or change the amount of suggestions shown based on the history with <a href="#suggestorder">suggestorder</a>. Finally you may want to clear the history (or parts of it) when quitting Vieb with <a href="#clearhistoryinterval">clearhistoryinterval</a> or the <a href="#:clear">:clear</a> command.
        <h3 id=":downloads">:downloads</h3>
        <ul>
            <li><span class="command-block">:downloads</span> - Open the downloads page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:downloads!</span> - Open the downloads page in a new tab</li>
            <li><span class="command-block">:d</span> - Open the downloads page</li>
        </ul>
        Use this command to open the download page, located at "vieb://downloads". This page contains a list of all the previously downloaded files, including those still in progress or cancelled. On this page you can pause or remove any of the downloads. There are also settings to automatically remove downloads, see <a href="#cleardownloadsoncompleted">cleardownloadsoncompleted</a> and <a href="#cleardownloadsonquit">cleardownloadsonquit</a> for details. Neither of these settings will remove downloaded files from disk. Downloads are by default started automatically, and will be stored in the folder configured by <a href="#downloadpath">downloadpath</a>. You can change the automatic download behavior using the <a href="#downloadmethod">downloadmethod</a> setting.
        <h3 id=":cookies">:cookies</h3>
        <ul>
            <li><span class="command-block">:cookies</span> - Open the cookies page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:cookies!</span> - Open the cookies page in a new tab</li>
        </ul>
        Open the cookies page with this command, located at "vieb://cookies". On this page you can view all of Vieb's cookies. The cookies page allows you to delete individual cookies, or all cookies (possibly based on a filter by name). Finally, it's also possible to delete cookies with <a href="#clearcookiesonquit">clearcookiesonquit</a>.
        <h3 id=":notifications">:notifications</h3>
        <ul>
            <li><span class="command-block">:notifications</span> - Open the notifications page in a new tab unless it should replace the current based on <a href="#replacespecial">replacespecial</a></li>
            <li><span class="command-block">:notifications!</span> - Open the notifications page in a new tab</li>
        </ul>
        This command opens the notifications page, located at "vieb://notifications". On this page you can view a list of all the previous notifications during this session. This list is always cleared when quitting Vieb.
        <h2 id="mappings">Mappings</h2>
        The keyboard mappings are completely dynamic in Vieb, meaning that you can change the behavior of all keyboard keys. To manage these mappings, Vieb implements a similar system to Vim, with support for recursion, multiple keystrokes, countable actions and similar features. These are all of the key differences of Vieb's mapping system compared to Vim:
        <ul>
            <li>Only the &lt;&gt;-notation is supported for including modifiers or special keys.</li>
            <li>All keyboard shortcuts passed to Vieb are supported, there are no terminal or history related limitations. For example, in Vieb you can distinguish between Meta and Alt keyboard mappings, and also map sequences unavailable in Vim, such as &lt;C-c&gt; (Ctrl-c), &lt;A-F4&gt; (Alt-F4) or &lt;C-M-A-S-Space&gt; (Ctrl-Meta-Alt-Shift-Space).</li>
            <li>Vieb allows you to optionally include the default mappings with any of the map commands by appending a <kbd>!</kbd> to it (see the list below for details).</li>
            <li>Vieb adds compatible map syntax to run actions or commands without remembering or preserving the original keys mapped to it.</li>
        </ul>
        Aside from these differences, the regular map commands are mostly identical in usage compared to Vim:
        <ul>
            <li><span class="command-block">:map</span> - List custom mappings or add a new recursive mapping</li>
            <li><span class="command-block">:map!</span> - List all mappings including Vieb's defaults</li>
            <li><span class="command-block">:noremap</span> - List custom mappings or add a new non-recursive mapping</li>
            <li><span class="command-block">:noremap!</span> - List all mappings including Vieb's defaults</li>
            <li><span class="command-block">:unmap</span> - Remove a mapping based on the key(s) provided</li>
            <li><span class="command-block">:mapclear</span> - Clear all custom mappings and restore the defaults</li>
            <li><span class="command-block">:mapclear!</span> - Clear every single mapping in Vieb, be warned that this is only recommended for usage in a viebrc file</li>
        </ul>
        All of these commands can also be prefixed with a single character to indicate a mode, for example:
        <ul>
            <li><span class="command-block">:nmap!</span> - List all mappings including default for <a class="normal" href="#normal">normal mode</a></li>
            <li><span class="command-block">:cunmap &lt;C-p&gt;</span> - Remove the mapping of Ctrl with p for <a class="command" href="#command">command mode</a></li>
            <li><span class="command-block">:imapclear</span> - Clear all custom mappings for <a class="insert" href="#insert">insert mode</a></li>
        </ul>
        All of these commands will be explained in more detail in their own paragraph below, you can jump there directly with the help command like so: <span class="command-block">:help :cunmap</span>. Pretty much all functionality that is activated by pressing keys are triggered via mappings, with two major exceptions: <a class="follow" href="#follow">follow mode</a> lets you select links by typing the letters next to it and <a href="#passthroughkeys">passthroughkeys</a> let you send the pressed keys to the page instead based on url and key codes (by default this setting is empty).
        <h3 id="key-codes">Key codes</h3>
        Some mappings require multiple keys to be pressed in order. If there are mappings that require multiple keys, and you only press the first one, Vieb will remember the keys you just pressed for a while, which allows you to press the next keys required for the mapping to activate. If <a href="#showcmd">showcmd</a> is enabled, the pressed keys will be shown in the top-right corner of the Vieb window. You can also configure the time it takes for pressed keys to be forgotten if no other keys are pressed using <a href="#timeout">timeout</a> and <a href="#timeoutlen">timeoutlen</a>. Suggestions are shown for subsequent mappings after pressing a key, which can be controlled with <a href="#mapsuggest">mapsuggest</a>. However, most default mappings of Vieb only require a single key to activate, although sometimes while holding down a modifier, such as Ctrl or Shift. The syntax for mappings keys can be easily summarized: it's the keys that would appear on screen if you were typing them out, so pressing <kbd>hjkl</kbd> would result in <kbd>hjkl</kbd>, which is also the map syntax from pressing them in order. Characters that are affected by Shift also work this way, so typing <kbd>hj</kbd> and then starting to hold shift while typing <kbd>KL</kbd> will result in <kbd>hjKL</kbd>, which is also the mapping sequence that Vieb and Vim will understand AND execute. This works for most of the single keys, including special characters such as <kbd>%</kbd> or <kbd>#</kbd>, but there are some exceptions:
        <ul>
            <li>Keys with modifiers like Ctrl, Meta or Alt (except those that are affected by Shift, such as <kbd>%</kbd> vs <kbd>5</kbd> or <kbd>U</kbd> vs <kbd>u</kbd>).</li>
            <li>Special characters that are given a proper name, because they don't map to a key or are part of the map syntax</li>
        </ul>
        There is a separate syntax to map such exceptions, examples like <kbd>&lt;C-c&gt;</kbd> meaning Ctrl-c, which is called the &lt;&gt;-notation.
        <h4 id="<>">&lt;&gt;-notation</h4>
        More advanced keys, such as the ones explained above, can be written using the &lt;&gt;-notation. This essentially means wrapping a written representation of the keys between &lt;&gt; signs. Here are some examples:
        <ul>
            <li><kbd>&lt;F12&gt;</kbd> - The F12 key, without holding modifiers</li>
            <li><kbd>&lt;S-Right&gt;</kbd> - Pressing the right arrow key while holding Shift</li>
            <li><kbd>&lt;C-j&gt;</kbd> - Press j while holding Ctrl</li>
            <li><kbd>&lt;C-J&gt;</kbd> - Press j while holding Ctrl and Shift</li>
            <li><kbd>&lt;C-M-A-S-Up&gt;</kbd> - Press the up arrow key, while holding all modifiers (keep in mind that it is system and keyboard dependent if these keys are actually registered and passed to Vieb)</li>
            <li><kbd>&lt;C-&gt;&gt;j&lt;S-Del&gt;</kbd> - Press &gt; while holding Ctrl, then press j without holding modifiers, finally press Delete while holding Shift</li>
        </ul>
        Also, <a href="#modifiers">modifiers</a> such as Shift or Ctrl are not registered on their own, but they do change the character that is pressed when holding them. The &lt;&gt;-notation is the only way to write down mappings which include a modifier of any kind, the full list of modifiers is:
        <ul>
            <li><kbd>C</kbd> short for Ctrl, for example Ctrl with a would be <kbd>&lt;C-a&gt;</kbd></li>
            <li><kbd>M</kbd> short for Meta, for example Meta with d would be <kbd>&lt;M-d&gt;</kbd></li>
            <li><kbd>A</kbd> short for Alt, for example Alt with q would be <kbd>&lt;A-q&gt;</kbd></li>
            <li><kbd>S</kbd> short for Shift, for example Shift with down would be <kbd>&lt;S-Down&gt;</kbd>, for most single characters, this notation is not needed, for example shift a would be simple <kbd>A</kbd> without &lt;&gt;</li>
        </ul>
        <h4>Named characters</h4>
        Similar tot the &lt;&gt;-notation, there are also keys that cannot be represented in a single character, one of which is &lt;, which is of course already part of the &lt;&gt;-notation syntax. These type of characters can be represented like so:
        <ul>
            <li><kbd>&lt;F1&gt;</kbd> - This represents the F1 key, all other F-keys work the same way up to F12.</li>
            <li><kbd>&lt;lt&gt;</kbd> - This represents the &lt; character.</li>
            <li><kbd>&lt;gt&gt;</kbd> - This represents the &gt; character, just <kbd>&gt;</kbd> also works, so <kbd>&lt;A-&gt;&gt;</kbd> and <kbd>&lt;A-gt&gt;</kbd> are identical.</li>
            <li><kbd>&lt;BS&gt;</kbd> - This represents the Backspace key.</li>
            <li><kbd>&lt;CR&gt;</kbd>, <kbd>&lt;NL&gt;</kbd>, <kbd>&lt;Return&gt;</kbd> or <kbd>&lt;Enter&gt;</kbd> - These represent the Enter key.</li>
            <li><kbd>&lt;Bar&gt;</kbd> - This represents the | character.</li>
            <li><kbd>&lt;Bslash&gt;</kbd> - This represents the \ character (forward slash is simply <kbd>/</kbd>).</li>
            <li><kbd>&lt;Left&gt;</kbd> - This represents the left arrow key (similarly, you have <kbd>&lt;Right&gt;</kbd>, <kbd>&lt;Up&gt;</kbd> and <kbd>&lt;Down&gt;</kbd>).</li>
            <li><kbd>&lt;Esc&gt;</kbd> - This represents the Escape key.</li>
            <li><kbd>&lt;Space&gt;</kbd> - This represents the spacebar, regular spaces can also be used.</li>
            <li><kbd>&lt;Del&gt;</kbd> - This represents the Delete key.</li>
            <li><kbd>&lt;Insert&gt;</kbd> - This represents the Insert key.</li>
            <li><kbd>&lt;Home&gt;</kbd> - This represents the Home key.</li>
            <li><kbd>&lt;PageUp&gt;</kbd> - This represents the PageUp key.</li>
            <li><kbd>&lt;End&gt;</kbd> - This represents the End key.</li>
            <li><kbd>&lt;PageDown&gt;</kbd> - This represents the PageDown key.</li>
            <li><kbd>&lt;Tab&gt;</kbd> - This represents the Tab key.</li>
            <li><kbd>&lt;Help&gt;</kbd> - This represents a Help key if present on the keyboard.</li>
            <li><kbd>&lt;Pause&gt;</kbd> - This represents the Pause key.</li>
            <li><kbd>&lt;PrintScreen&gt;</kbd> or <kbd>&lt;PrtScr&gt;</kbd> - These represent the PrintScreen key.</li>
            <li><kbd>&lt;NumLock&gt;</kbd> - This represents the NumLock key.</li>
            <li><kbd>&lt;CapsLock&gt;</kbd> - This represents the CapsLock key.</li>
            <li><kbd>&lt;ScrollLock&gt;</kbd> - This represents the ScrollLock key.</li>
            <li><kbd>&lt;kLeft&gt;</kbd> - This represents the left arrow key on the numpad/keypad, the 4 key when NumLock is off (similarly, you have <kbd>&lt;kRight&gt;</kbd> on 6, <kbd>&lt;kUp&gt;</kbd> on 8 and <kbd>&lt;kDown&gt;</kbd> on 2).</li>
            <li><kbd>&lt;kPlus&gt;</kbd> - This represents the Plus key "+" on the numpad/keypad, where NumLock state is not relevant.</li>
            <li><kbd>&lt;kMinus&gt;</kbd> - This represents the Minus key "-" on the numpad/keypad, where NumLock state is not relevant.</li>
            <li><kbd>&lt;kMultiply&gt;</kbd> - This represents the Multiply key "*" on the numpad/keypad, where NumLock state is not relevant.</li>
            <li><kbd>&lt;kDivide&gt;</kbd> - This represents the Divide key "/" on the numpad/keypad, where NumLock state is not relevant.</li>
            <li><kbd>&lt;kPoint&gt;</kbd> - This represents the Point key "." on the numpad/keypad, which requires NumLock to be on.</li>
            <li><kbd>&lt;kDel&gt;</kbd> - This represents the Delete key on the numpad/keypad, which requires NumLock to be off.</li>
            <li><kbd>&lt;kClear&gt;</kbd> - This represents the Clear key on the numpad/keypad, the 5 key when NumLock is off.</li>
            <li><kbd>&lt;kHome&gt;</kbd> - This represents the Home key on the numpad/keypad, the 7 key when NumLock is off.</li>
            <li><kbd>&lt;kEnd&gt;</kbd> - This represents the End key on the numpad/keypad, the 1 key when NumLock is off.</li>
            <li><kbd>&lt;kPageUp&gt;</kbd> - This represents the PageUp key on the numpad/keypad, the 9 key when NumLock is off.</li>
            <li><kbd>&lt;kPageDown&gt;</kbd> - This represents the PageDown key on the numpad/keypad, the 3 key when NumLock is off.</li>
            <li><kbd>&lt;k0&gt;</kbd> - This represents the 0 key on the numpad/keypad, all other numbers work the same way up to k9, requires NumLock to be on.</li>
            <li><kbd>&lt;kEnter&gt;</kbd> - This represents the Enter key on the numpad/keypad, where NumLock state is not relevant.</li>
            <li><kbd>&lt;kInsert&gt;</kbd> - This represents the Insert key on the numpad/keypad, the 0 key when NumLock is off.</li>
        </ul>
        All other characters do not have a special name you need to use, and can just be typed as is to refer to the key. Please note that <a href="#Nop">Nop</a> is considered an action and not a key.
        <h5 id="any">Any key</h5>
        The <span class="command-block">&lt;Any&gt;</span> key is a special key name that can be used to represent every single key that is not a <a href="#modifiers">modifier</a>. It is by default used to control the key used for <a href="#quickmarks">Quickmarks</a>, but you may also use it in your own custom mappings. More specific mappings take priority over mappings that use Any.
        <h4>Map actions</h4>
        Unlike Vim, it's possible to map keys directly to actions or commands, without relying on keystrokes. Some examples already make use of this syntax. To refer to an action, wrap it around with &lt; and &gt; characters, such as this: <kbd>&lt;toExploreMode&gt;</kbd> for going to <a class="explore" href="#explore">explore mode</a>. These actions can appear anywhere in the right side of the map command. Similarly this can be done for commands using the same syntax with a <kbd>:</kbd> character to indicate that it's a command, for example: <kbd>&lt;:quit&gt;</kbd>.
        <h3 id=":map">:map</h3>
        <ul>
            <li><span class="command-block">:map</span> - List all custom mappings for every mode</li>
            <li><span class="command-block">:map!</span> - List every single mapping currently available for all modes</li>
            <li><span class="command-block">:map j</span> - List the mappings for the <kbd>j</kbd> key in all modes</li>
            <li><span class="command-block">:map! &lt;A-F4&gt;</span> - List the mappings for <kbd>Alt-F4</kbd> in all modes including defaults</li>
            <li><span class="command-block">:map &lt;C-h&gt; &lt;:history&gt;</span> - Make Ctrl-h open the history page using Vieb's map syntax</li>
            <li><span class="command-block">:map &lt;C-h&gt; &lt;Esc&gt;:history&lt;CR&gt;</span> - Make Ctrl-h open the history page with recursive mappings</li>
            <li><span class="command-block">:map &lt;C-T&gt; &lt;reopenTab&gt;</span> - Make Ctrl-Shift-t reopen the previously closed tab using a Vieb action</li>
            <li><span class="command-block">:map &lt;C-T&gt; u</span> - Make Ctrl-Shift-t reopen the previously closed tab with a recursive mapping</li>
            <li><span class="command-block">:map &lt;Bslash&gt;&gt;?&lt;S-Del&gt;</span> - List every mapping for typing a backslash, then a greater than sign, after that a question mark and finally pressing Shift with Delete (probably none)</li>
        </ul>
        The map command takes any number of arguments. Without any arguments, it lists the mappings for all modes. To also list the default mappings of Vieb, append the map command with a <kbd>!</kbd>. When a single argument is added to the map command, it will only list mappings for that specific key or sequence of keys. If more than one argument is provided, the first argument is stored separately from all the others. The first one represents the keys that you need to press to execute all the other keys provided. For example, the command <span class="command-block nowrap">:map &lt;C-J&gt; &lt;Esc&gt;:downloads&lt;Enter&gt;</span> will add a mapping for pressing j while holding Shift and Ctrl. When those keys are pressed, it will automatically trigger the Escape key, type out ":downloads" and finally trigger the Enter key. Or in other words, this will make it so that pressing Ctrl-Shift-j will open the downloads page. When adding a new mapping with this command, it will always overwrite existing mappings.
        <h3 id=":noremap">:noremap</h3>
        <ul>
            <li><span class="command-block">:noremap</span> - List all custom mappings for every mode</li>
            <li><span class="command-block">:noremap!</span> - List every single mapping currently available for all modes</li>
            <li><span class="command-block">:noremap j</span> - List the mappings for the <kbd>j</kbd> key in all modes</li>
            <li><span class="command-block">:noremap! d</span> - List the mappings for <kbd>d</kbd> in all modes including defaults</li>
            <li><span class="command-block">:noremap &lt;C-Y&gt; &lt;toCommandMode&gt;downloads&lt;useEnteredData&gt;</span> - Make Ctrl-Shift-y open the downloads</li>
            <li><span class="command-block">:noremap &lt;C-h&gt; &lt;:history&gt;</span> - Make Ctrl-h open the history page</li>
            <li><span class="command-block">:noremap &lt;C-T&gt; &lt;reopenTab&gt;</span> - Make Ctrl-Shift-t reopen the previously closed tab</li>
            <li><span class="command-block">:noremap ??? &lt;:help&gt;</span> - When pressing three subsequent question marks, open the help page</li>
        </ul>
        This command is similar to <a href="#:map">:map</a> and invoked with the same arguments, but does not recursively trigger other actions. This means that you can use it to type out characters that are otherwise mapped to actions.
        <h3 id=":unmap">:unmap</h3>
        <ul>
            <li><span class="command-block">:unmap &lt;F1&gt;</span> - Remove the mapping of the F1 key for all modes</li>
            <li><span class="command-block">:unmap &lt;C-c&gt;</span> - Remove the mapping of the Ctrl-c combination for all modes</li>
            <li><span class="command-block">:unmap &lt;C-w&gt;&lt;C-r&gt;</span> - Remove this mapping for all modes: Ctrl-w followed by Ctrl-r</li>
            <li><span class="command-block">:unmap t&lt;Any&gt;</span> - Remove the single mapping t and then any key literally</li>
            <li><span class="command-block">:unmap! t&lt;Any&gt;</span> - Remove all mappings that start with t and then have a single key after it (any is used as a wildcard)</li>
            <li><span class="command-block">:unmap! &lt;Any&gt;</span> - Remove all single key mappings (any is used as a wildcard)</li>
        </ul>
        The unmap command is to remove a mapping and disable the effects of invoking those keys. For example, to disable <kbd>F1</kbd> from opening the help page, without mapping it to something else: <span class="command-block">:unmap &lt;F1&gt;</span>. The unmap command always takes a single argument. Without the confirm ! added, the Any key is used the same as when mapping it, meaning it will only remove mappings that are actually using Any in them. If you do add the ! confirmation, you will use Any as a wildcard, meaning that it will not only remove exact mappings, but all mappings that would be the same if the Any you use would be the key of that mapping, meaning you can delete a lot of mappings at once with this, as long as they use the same amount of keys. The mode specific unmap commands can also be confirmed and will work the same but only for one mode.
        <h3 id=":mapclear">:mapclear</h3>
        <ul>
            <li><span class="command-block">:mapclear</span> - Remove all custom mappings for all modes</li>
            <li><span class="command-block">:mapclear!</span> - Remove every single mapping of Vieb, including defaults (executing this at runtime WILL prevent you from using Vieb!)</li>
        </ul>
        The mapclear command is used to clear all custom mappings. It is recommended to only use this command from the <a href="#viebrc">viebrc</a> file, while also adding new mappings in the same file. It can offer you a clean starting point to start mapping your own keystrokes. To also clear built-in mappings with this command, you can append it with a <kbd>!</kbd>. Keep in mind that this will really remove ALL mappings for all modes, so there is no way back if you run this at runtime! It's therefor recommended to only use this command from a viebrc, after which you need to add your own custom keyboard sequences mapped to actions or commands.
        <h3 id=":nmap">:nmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="normal" href="#normal">normal mode</a>.
        <h3 id=":nnoremap">:nnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="normal" href="#normal">normal mode</a>.
        <h3 id=":nunmap">:nunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="normal" href="#normal">normal mode</a>.
        <h3 id=":nmapclear">:nmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="normal" href="#normal">normal mode</a>.
        <h3 id=":cmap">:cmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="command" href="#command">command mode</a>.
        <h3 id=":cnoremap">:cnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="command" href="#command">command mode</a>.
        <h3 id=":cunmap">:cunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="command" href="#command">command mode</a>.
        <h3 id=":cmapclear">:cmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="command" href="#command">command mode</a>.
        <h3 id=":emap">:emap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="explore" href="#explore">explore mode</a>.
        <h3 id=":enoremap">:enoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="explore" href="#explore">explore mode</a>.
        <h3 id=":eunmap">:eunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="explore" href="#explore">explore mode</a>.
        <h3 id=":emapclear">:emapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="explore" href="#explore">explore mode</a>.
        <h3 id=":imap">:imap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="insert" href="#insert">insert mode</a>.
        <h3 id=":inoremap">:inoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="insert" href="#insert">insert mode</a>.
        <h3 id=":iunmap">:iunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="insert" href="#insert">insert mode</a>.
        <h3 id=":imapclear">:imapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="insert" href="#insert">insert mode</a>.
        <h3 id=":smap">:smap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="search" href="#search">search mode</a>.
        <h3 id=":snoremap">:snoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="search" href="#search">search mode</a>.
        <h3 id=":sunmap">:sunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="search" href="#search">search mode</a>.
        <h3 id=":smapclear">:smapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="search" href="#search">search mode</a>.
        <h3 id=":fmap">:fmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="follow" href="#follow">follow mode</a>.
        <h3 id=":fnoremap">:fnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="follow" href="#follow">follow mode</a>.
        <h3 id=":funmap">:funmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="follow" href="#follow">follow mode</a>.
        <h3 id=":fmapclear">:fmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="follow" href="#follow">follow mode</a>.
        <h3 id=":pmap">:pmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id=":pnoremap">:pnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id=":punmap">:punmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id=":pmapclear">:pmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id=":vmap">:vmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for <a class="visual" href="#visual">visual mode</a>.
        <h3 id=":vnoremap">:vnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for <a class="visual" href="#visual">visual mode</a>.
        <h3 id=":vunmap">:vunmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for <a class="visual" href="#visual">visual mode</a>.
        <h3 id=":vmapclear">:vmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for <a class="visual" href="#visual">visual mode</a>.
        <h3 id=":mmap">:mmap</h3>
        Usage is identical to <a href="#:map">:map</a>, but this command only lists or adds recursive mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See <a href="#menu">menu</a> for details.
        <h3 id=":mnoremap">:mnoremap</h3>
        Usage is identical to <a href="#:noremap">:noremap</a>, but this command only lists or adds non-recursive mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See <a href="#menu">menu</a> for details.
        <h3 id=":munmap">:munmap</h3>
        Usage is identical to <a href="#:unmap">:unmap</a>, but this command only removes mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See <a href="#menu">menu</a> for details.
        <h3 id=":mmapclear">:mmapclear</h3>
        Usage is identical to <a href="#:mapclear">:mapclear</a>, but this command only clears mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See <a href="#menu">menu</a> for details.
        <h2 id="customcommands">Custom commands</h2>
        Vieb allows you to define custom commands. These commands can be used as an alternative to custom mappings, and can also be used within other mappings or commands. For example, to open vieb.dev with a homepage command, add a new command such as:
        <div class="command-block">:command homepage &lt;Esc&gt;evieb.dev&lt;Enter&gt;</div>
        The "e" in front of vieb.dev is for going into explore mode. This example can also be written as:
        <div class="command-block">:command homepage &lt;toExploreMode&gt;vieb.dev&lt;useEnteredData&gt;</div>
        Finally, it's also possible to refer to other commands when defining a new command, similar to adding keyboard mappings. This looks like this:
        <div class="command-block">:command homepage &lt;:open vieb.dev&gt;</div>
        <h3 id=":command">:command</h3>
        <ul>
            <li><span class="command-block">:command</span> - Show a list of all user defined commands</li>
            <li><span class="command-block">:command homepage &lt;:open vieb.dev&gt;</span> - Add a custom command name homepage, to navigate to vieb.dev</li>
            <li><span class="command-block">:command homepage</span> - Show the actions bound to the homepage command, if it exists</li>
            <li><span class="command-block">:command! clickonmenu &lt;Esc&gt;/Menu&lt;Enter&gt;n&lt;Enter&gt;</span> - Add a command to click on the first match on the page with the "Menu" text, overwriting any existing command with the same name</li>
        </ul>
        The command to add custom commands is simply named "command". Without arguments, it will lists all previously added custom commands. With one argument, it will list one specific command and its actions. With two or more arguments, it will add a new command, where the first argument is the command name and all other arguments are the mapping. To overwrite commands that you have already defined before, append a "!" at the end of the command.
        <h3 id="use">Use</h3>
        You can also extend commands with values from the current page, like the URL or title. The following use templates are available:
        <ul>
            <li><span class="command-block">&lt;useCurrentUrl&gt;</span> - Use the current page url in a command</li>
            <li><span class="command-block">&lt;useCurrentOrigin&gt;</span> - Use the current page origin (domain + protocol) in a command</li>
            <li><span class="command-block">&lt;useCurrentTitle&gt;</span> - Use the current page title in a command</li>
            <li><span class="command-block">&lt;useCurrentDomain&gt;</span> - Use the current domain in a command</li>
        </ul>
        Here are a few examples of what commands can be achieved with this:
        <ul>
            <li><span class="command-block">:command allowscript &lt;:set resourcesallowed+=&lt;useCurrentUrl&gt;~script&gt;&lt;refreshTab&gt;</span> - Enable javascript for the current page if browsing without the script tag on resourcetypes</li>
            <li><span class="command-block">:command favoritepage &lt;:set favoritepages+=&lt;useCurrentUrl&gt;&gt;</span> - Add the current page to the favoritepages list</li>
            <li><span class="command-block">:command mpv &lt;:!mpv "&lt;useCurrentUrl&gt;"&gt;</span> - Start playing the video in the current url on the mpv player</li>
            <li><span class="command-block">:command savepage &lt;:!echo "'&lt;useCurrentUrl&gt; # &lt;useCurrentTitle&gt;' | tee $HOME/pages"&gt;</span> - Saves the current page in a custom file in the format "https://example.com # Example Page Title" for later</li>
        </ul>
        <h3 id=":echo">:echo</h3>
        <ul>
            <li><span class="command-block">:echo example</span> - Show a notification with the text "example"</li>
            <li><span class="command-block">:echo &lt;useCurrentUrl&gt;</span> - Show a notification with the current page url as its text</li>
        </ul>
        This simple command will show a notification for whatever is added as an argument, including the <a href="#use">use</a> values. It is especially useful when combined with the "--execute" startup flag, that lets you run commands from the CLI in currently opened Vieb instances.
        <h3 id=":delcommand">:delcommand</h3>
        <ul>
            <li><span class="command-block">:delcommand clickonmenu</span> - Remove the clickonmenu custom command</li>
            <li><span class="command-block">:delcommand homepage</span> - Remove the homepage custom command</li>
        </ul>
        This command can be used to delete previously defined custom commands. It takes exactly one argument: the name of the command to be deleted. As with the previous command, it can not modify or delete built-in commands.
        <h3 id=":comclear">:comclear</h3>
        <ul>
            <li><span class="command-block">:comclear</span> - Remove every single custom command</li>
        </ul>
        The comclear command will unconditionally remove every single custom command that has been added. It will not remove built-in commands.
        <h2 id="splits">Splits</h2>
        Vieb allows you to view multiple pages at once using window splits. This paragraph will explain which commands can be used to open split windows or how to switch between splits. For other window splitting related actions, see the <a href="#splitting">splitting</a> chapter.
        <h3 id=":buffer">:buffer</h3>
        <ul>
            <li><span class="command-block">:buffer 0</span> - Switch to the first tab in the bar</li>
            <li><span class="command-block">:b vieb.dev</span> - Switch to the first tab containing "vieb.dev"</li>
            <li><span class="command-block">:buffer 9</span> - Switch to the 10th tab (or the last tab in the tabbar if less than 10)</li>
            <li><span class="command-block">:buffer -1</span> - Switch to the last tab based on index</li>
            <li><span class="command-block">:buffer #</span> - Switch to the <a href="#lastusedtab">last used tab</a></li>
            <li><span class="command-block">:b github vieb</span> - Switch to the first tab containing "github" and "vieb"</li>
        </ul>
        The buffer command can be used to switch to a tab by name or index. It accepts any number of arguments that will all be used to find the most appropriate tab. Contrary to the <a href="#action.nextTab">action.nextTab</a> and <a href="#action.previousTab">action.previousTab</a> actions, which switch in the order of the tabbar, the buffer command can switch to any tab regardless of its location in the tabbar. This is also important to keep in mind when using window splits, because switching between tabs can also change which splits are displayed. If you switch to a tab that is already visible in one of the splits, no splits will be changed, but the focus will simply switch to the other split. However, if the tab you switch to is not visible yet, the current split will switch to the new tab. This can be confusing when using the tab switch actions in combination with multiple splits, which is why the buffer command is recommended for switching when using multiple window splits. The buffer command will have no effect if the tab cannot be found, unless the argument is a single number, in which case it will switch to the closest tab by index, which can also wrap from the end if you provide a negative number. There are also many actions for switching between splits, see the <a href="#splitting">splitting</a> chapter for details. You can use the buffer command even without using splits.
        <h4 id="lastusedtab">Last used tab</h4>
        When you navigate between tabs, the previously focused tab is stored, if you have had them as the current tab for at least <a href="#timeoutlen">timeoutlen</a> (regardless of <a href="#timeout">timeout</a> being enabled). If you quickly switch two tabs/splits or more within timeoutlen, <span class="command-block">:buffer #</span> can be used to go back all the way back to the one that was actually active for a while. This same logic is what makes this work when combining split movement or tab switch actions with the number counter. For example, after quickly moving two tabs to the right, executing this command will go back to the tab two tabs to the left. If called again, it will go back to the tab two tabs to the right. The "#" argument can also be provided to other buffer-like commands, and will always refer the the last used tab via this method.
        <h3 id=":buffers">:buffers</h3>
        <ul>
            <li><span class="command-block">:buffers</span> - Show a notification with all tab urls by index</li>
        </ul>
        With this command you can list the urls of all open tabs, separated by a newline, each line containing "index: url", where index is the buffer-like command tab index, and url the tab's url.
        <h3 id=":hide">:hide</h3>
        <ul>
            <li><span class="command-block">:hide</span> - Hide the currently focused window split, if others are also visible</li>
            <li><span class="command-block">:hide 0</span> - Hide a window split based on tab index, in this case the first</li>
            <li><span class="command-block">:hide vieb.dev</span> - Hide the window split with "vieb.dev" in the url</li>
            <li><span class="command-block">:hide 9</span> - Hide the 10th window split (or the last split in the tabbar if less than 10)</li>
            <li><span class="command-block">:hide -1</span> - Hide the last window split based on index</li>
            <li><span class="command-block">:hide #</span> - Hide the <a href="#lastusedtab">last used tab</a></li>
            <li><span class="command-block">:hide github vieb</span> - Hide the window split containing both "github" and "vieb"</li>
        </ul>
        The hide command can be used to hide one of the visible splits. This command takes any number of arguments. If no arguments are provided, it will hide the currently focused split window. For any other number of arguments, it will hide the window split that most accurately matches the arguments. This can be a tab index or keywords that refer to parts of the url, similar to the buffer command. The command will not have effect it there is only one page visible, or if there is no matching tab. If the argument is a single number, but the tab index is too high, it will instead hide the window split connected to the latest tab by index.
        <h3 id=":Vexplore">:Vexplore</h3>
        <ul>
            <li><span class="command-block">:Vexplore</span> - Open a vertical split with a new tab</li>
            <li><span class="command-block">:Vexplore vieb.dev</span> - Open a vertical split with the tab matching vieb.dev, or a new tab with this url</li>
            <li><span class="command-block">:Vexplore 9</span> - Open a vertical split with the tab matching the 10th or last in the tabbar</li>
            <li><span class="command-block">:Vexplore -1</span> - Open a vertical split with the last tab based on index</li>
            <li><span class="command-block">:Vexplore #</span> - Open a vertical split with the <a href="#lastusedtab">last used tab</a></li>
            <li><span class="command-block">:Vexplore github vieb</span> - Open a vertical split with the tab matching "github vieb", or a new tab with a search of "github vieb"</li>
        </ul>
        This command can be used to open a vertical split within the Vieb window. Splits are used to view multiple pages at the same time, and this command accepts arguments to specify which page that should be. Any number of arguments can be given, without arguments it will vertically split with a new tab. If any other number of arguments are given, it will search of tabs matching by index or by url, similar to the <a href="#:buffer">:buffer</a> command. If no matching tab is found for a string, it will instead open a new tab based on the string (regardless of this being a url or a search on the web). The Vexplore command will always result in a new vertical split, regardless of the arguments, as it will open a new tab for search strings without matches. You can configure if you want to open new vertical splits on the left or the right of the current one using the <a href="#splitright">splitright</a> setting.
        <h3 id=":Sexplore">:Sexplore</h3>
        Usage is the same as the <a href="#:Vexplore">:Vexplore</a> command, but instead of a vertical split, this command will split horizontally. See the <a href="#splitting">splitting</a> related action on how to manage the size and location of window splits once you have opened them with these split commands. You can configure if you want to open new horizontal splits on top or below the current one using the <a href="#splitbelow">splitbelow</a> setting.
        <h3 id=":vsplit">:vsplit</h3>
        Identical to <a href="#:Vexplore">:Vexplore</a>.
        <h3 id=":split">:split</h3>
        Identical to <a href="#:Sexplore">:Sexplore</a>.
        <h3 id=":only">:only</h3>
        <ul>
            <li><span class="command-block">:only</span> - Hide all window splits except the currently active one</li>
        </ul>
        With this command you can hide all window splits and return to the single page layout. It will hide all tabs/splits except for the currently focused one.
        <h2>Navigation commands</h2>
        <h3 id=":open">:open</h3>
        <ul>
            <li><span class="command-block">:o vieb.dev</span> - Go to vieb.dev in the current tab</li>
            <li><span class="command-block">:open github vieb</span> - Search for "github vieb" in the current tab</li>
        </ul>
        The open command will open the provided URL (or web search, if the arguments are not a valid address). From the user's perspective this is no better than simply switching to <a class="explore" href="#explore">explore mode</a>. This command is mainly useful when you want to create a custom command that jumps to a URL. Scripting this use case with <a class="explore" href="#explore">explore mode</a> is functional, but a slower because it will type out the keys, while this command is executed immediately.
        <h3 id=":tabnew">:tabnew</h3>
        <ul>
            <li><span class="command-block">:tabnew</span> - Open a blank new tab (container name as chosen by containernewtab)</li>
            <li><span class="command-block">:tabnew vieb.dev</span> - Go to vieb.dev in a new tab (container name chosen by containernames or containernewtab as fallback)</li>
            <li><span class="command-block">:tabnew github vieb</span> - Search for "github vieb" in a new tab (container name chosen by containernames or containernewtab as fallback)</li>
        </ul>
        With this command you can open a new tab, optionally with a url or a <a href="#searchengine">searchengine</a> argument. The position of the newly opened tab can be configured by the <a href="#tabnewposition">tabnewposition</a> setting. To open a new tab and switch to <a class="explore" href="#explore">explore mode</a> with the current url pre-filled in the bar, use <a href="#action.openNewTabWithCurrentUrl">action.openNewTabWithCurrentUrl</a>. In case you want to use a custom new tab page, see <a href="#newtaburl">newtaburl</a>. The container name will be influenced by <a href="#containernames">containernames</a>, but only when a url/search is provided, as it will otherwise just use <a href="#containernewtab">containernewtab</a>. Finally, you can open new tabs with a custom container name using <a href="#:tabnewcontainer">:tabnewcontainer</a>.
        <h3 id=":tabnewcontainer">:tabnewcontainer</h3>
        <ul>
            <li><span class="command-block">:tabnewcontainer</span> - Open a blank new tab (container name as chosen by containernewtab)</li>
            <li><span class="command-block">:tabnewcontainer mycontainer</span> - Open a blank new tab in the "mycontainer" container</li>
            <li><span class="command-block">:tabnew tempvieb vieb.dev</span> - Go to vieb.dev in a new tab in the "tempvieb" container (which is cleared on quit, because it's prefixed with "temp")</li>
            <li><span class="command-block">:tabnew github github vieb</span> - Search for "github vieb" in a new tab in the "github" container</li>
        </ul>
        Similar to the <a href="#:tabnew">:tabnew</a> command, but the first argument is always the name of the new container. This command is the only way to open a new tab in a different container compared to the <a href="#containernames">containernames</a> setting. If you have a good containernames list and you want to use it, use the <a href="#:tabnew">:tabnew</a> command. This command is only if you want to open a url or search in a custom container you manually choose the name for.
        <h2 id="quickmarks">Quickmarks</h2>
        With Quickmarks, you can quickly store scroll positions, pointer positions and page urls for later use. Besides commands, there are also actions that are used to create and open these marks, as well as settings to control the way they are stored and loaded. All relevant actions are in <a href="#quickmarking">quickmarking</a>.
        <h3 id=":scrollpos">:scrollpos</h3>
        <ul>
            <li><span class="command-block">:scrollpos</span> - Show a list of stored scroll positions by key</li>
            <li><span class="command-block">:scrollpos a</span> - Show a list of stored scroll positions for the "a" key</li>
            <li><span class="command-block">:scrollpos a 900</span> - Set the scroll position key "a" to 900 pixels for the current domain/url</li>
            <li><span class="command-block">:scrollpos A 900</span> - Set the global scroll position key "A" to 900</li>
            <li><span class="command-block">:scrollpos a 900 global</span> - Set the global scroll position key "a" to 900 pixels</li>
            <li><span class="command-block">:scrollpos a vieb.dev 500</span> - Set the scroll position key "a" to 500 pixels for the vieb.dev domain</li>
            <li><span class="command-block">:scrollpos a 1000 https://github.com/</span> - Set the scroll position key "a" to 1000 pixels for the github homepage if <a href="#scrollposlocalid">scrollposlocalid</a> is set to "url"</li>
        </ul>
        The scrollpos command shows you a list of stored scroll positions. Without an argument, it shows all of them. If you provide an argument, it shows only the position stored for that key. If a url or domain is listed after the key and the scroll position (in pixels), it refers to a local position, that is only remembered for that domain or url. You can control which keys should be stored as global/local, with the <a href="#scrollpostype">scrollpostype</a> setting, or override it by passing global instead of the domain/url. By default, uppercase keys are global, while lowercase ones are local. You can store a new position using the <a href="#action.storeScrollPos">action.storeScrollPos</a>. You can store the local positions either by url or by domain, which you can control with <a href="#scrollposlocalid">scrollposlocalid</a>. Loading a scroll position can be done with <a href="#action.restoreScrollPos">action.restoreScrollPos</a>, while deleting them can be done with <a href="#:delscrollpos">:delscrollpos</a>.
        <h3 id=":restorescrollpos">:restorescrollpos</h3>
        <ul>
            <li><span class="command-block">:restorescrollpos a</span> - Restore the "a" scroll position for the current domain/url or the global one</li>
            <li><span class="command-block">:restorescrollpos A</span> - Restore the global "A" scroll position</li>
            <li><span class="command-block">:restorescrollpos a vieb.dev</span> - Restore the "a" scroll position for the vieb.dev domain</li>
            <li><span class="command-block">:restorescrollpos a https://github.com/</span> - Restore the "a" scroll position for the github homepage if <a href="#scrollposlocalid">scrollposlocalid</a> is set to "url"</li>
        </ul>
        With the restorescrollpos command you can restore a scroll position by key. Only the key argument is required, similar to using <a href="#action.restoreScrollPos">action.restoreScrollPos</a>. Optionally, you can also provide the domain/url to use instead of the current one to find the local key. This argument is unused if the key is deemed a global one as controlled with <a href="#scrollpostype">scrollpostype</a>
        <h3 id=":delscrollpos">:delscrollpos</h3>
        <ul>
            <li><span class="command-block">:delscrollpos a</span> - Delete scroll positions stored at the "a" key, either for the current local domain/url or any global ones at the "a" key</li>
            <li><span class="command-block">:delscrollpos A</span> - Delete global scroll position stored at the "A" key</li>
            <li><span class="command-block">:delscrollpos a vieb.dev</span> - Delete all scroll positions stored at the "a" for vieb.dev</li>
            <li><span class="command-block">:delscrollpos a *</span> - Delete all scroll positions stored at the "a" key</li>
            <li><span class="command-block">:delscrollpos!</span> - Delete all local scroll positions for the current domain/url</li>
            <li><span class="command-block">:delscrollpos! vieb.dev</span> - Delete all local scroll positions for vieb.dev</li>
            <li><span class="command-block">:delscrollpos! *</span> - Delete all scroll positions, including global ones</li>
            <li><span class="command-block">:delscrollpos! local</span> - Delete all local scroll positions</li>
            <li><span class="command-block">:delscrollpos! global</span> - Delete all global scroll positions</li>
        </ul>
        With this command you can delete any previously stored scroll positions by key, domain or url. Whether it uses the domain or the url is controlled by <a href="#scrollposlocalid">scrollposlocalid</a>. Without a confirm override "!", it will always require a key to delete, which is by default only for the local ones at the current domain/url or the global ones. If you pass a domain/url, you can delete the key for a different domain/url, where "*" will match all of them including global ones. If you do supply the "!" confirm override, you can delete any key in one go, by default for the current domain/url, but you can also supply one. In case you supply "*", "local" or "global", it will delete ALL, local or global positions respectively.
        <h3 id=":marks">:marks</h3>
        <ul>
            <li><span class="command-block">:marks</span> - Show a list of stored marks by key</li>
            <li><span class="command-block">:marks a</span> - Show the url/mark stored at the "a" key</li>
            <li><span class="command-block">:marks a vieb.dev</span> - Set the mark for the "a" key to vieb.dev</li>
        </ul>
        The marks command shows you a list of stored marks (page urls). Without an argument, it shows all of them. If you provide an argument, it shows only the marks stored for that key. The url listed after the key is the one that can be restored with <a href="#action.restoreMark">action.restoreMark</a>. You can control the destination of the restored url using the <a href="#markposition">markposition</a> setting, and make new marks using <a href="#action.makeMark">action.makeMark</a>. Shifted keys can optionally be restored to a different location if you choose to set <a href="#markpositionshifted">markpositionshifted</a>.
        <h3 id=":restoremark">:restoremark</h3>
        <ul>
            <li><span class="command-block">:restoremark a</span> - Restore the "a" mark to the <a href="#markposition">markposition</a></li>
            <li><span class="command-block">:restoremark a split</span> - Restore the "a" mark to a new split</li>
        </ul>
        With the restoremark command you can restore a mark by key. By default, this will use the <a href="#markposition">markposition</a> and <a href="#markpositionshifted">markpositionshifted</a> settings to choose the position, but you can override this by giving the position manually as the second argument. Valid positions are the same as for either of these settings. If not provided, this command is basically idential to <a href="#action.restoreMark">action.restoreMark</a>.
        <h3 id=":delmarks">:delmarks</h3>
        <ul>
            <li><span class="command-block">:delmarks a</span> - Delete the mark stored at the "a" key</li>
            <li><span class="command-block">:delmarks!</span> - Delete all marks</li>
        </ul>
        With this command you can delete any previously stored marks by key. If suffixed with "!", it can delete ALL marks. If a key is passed, it will delete the mark stored in that key.
        <h3 id=":pointerpos">:pointerpos</h3>
        <ul>
            <li><span class="command-block">:pointerpos</span> - Show a list of stored pointer positions by key</li>
            <li><span class="command-block">:pointerpos a</span> - Show a list of stored pointer positions for the "a" key</li>
            <li><span class="command-block">:pointerpos a 500 900</span> - Set the pointer position key "a" to x 500 y 900 for the current domain/url</li>
            <li><span class="command-block">:pointerpos A 500 900</span> - Set the global pointer position key "A" to x 500 y 900</li>
            <li><span class="command-block">:pointerpos a 500 900 global</span> - Set the global pointer position key "a" to x 500 y 900</li>
            <li><span class="command-block">:pointerpos a 500 900 vieb.dev</span> - Set the pointer position key "a" to x 500 y 900 for the vieb.dev domain</li>
            <li><span class="command-block">:pointerpos a 500 900 https://github.com/</span> - Set the pointer position key "a" to x 500 y 900 for the github homepage if <a href="#pointerposlocalid">pointerposlocalid</a> is set to "url"</li>
        </ul>
        The pointerpos command shows you a list of stored <a class="pointer" href="#pointer">pointer</a> positions. Without an argument, it shows all of them. If you provide an argument, it shows only the position stored for that key. If a url or domain is listed after the key and the pointer position (in pixels), it refers to a local position, that is only remembered for that domain or url. You can control which keys should be stored as global/local, with the <a href="#pointerpostype">pointerpostype</a> setting, or override it by passing global instead of the domain/url. By default, uppercase keys are global, while lowercase ones are local. You can store a new position using the <a href="#pointer.storePos">pointer.storePos</a>. You can store the local positions either by url or by domain, which you can control with <a href="#pointerposlocalid">pointerposlocalid</a>. Loading a pointer position can be done with <a href="#pointer.restorePos">pointer.restorePos</a>, while deleting them can be done with <a href="#:delpointerpos">:delpointerpos</a>.
        <h3 id=":restorepointerpos">:restorepointerpos</h3>
        <ul>
            <li><span class="command-block">:restorepointerpos a</span> - Restore the "a" pointer position for the current domain/url or the global one</li>
            <li><span class="command-block">:restorepointerpos A</span> - Restore the global "A" pointer position</li>
            <li><span class="command-block">:restorepointerpos a vieb.dev</span> - Restore the "a" pointer position for the vieb.dev domain</li>
            <li><span class="command-block">:restorepointerpos a https://github.com/</span> - Restore the "a" pointer position for the github homepage if <a href="#pointerposlocalid">pointerposlocalid</a> is set to "url"</li>
        </ul>
        With the restorepointerpos command you can restore a <a class="pointer" href="#pointer">pointer</a> position by key. Only the key argument is required, similar to using <a href="#pointer.restorePos">pointer.restorePos</a>. Optionally, you can also provide the domain/url to use instead of the current one to find the local key. This argument is unused if the key is deemed a global one as controlled with <a href="#pointerpostype">pointerpostype</a>
        <h3 id=":delpointerpos">:delpointerpos</h3>
        <ul>
            <li><span class="command-block">:delpointerpos a</span> - Delete pointer positions stored at the "a" key, either for the current local domain/url or any global ones at the "a" key</li>
            <li><span class="command-block">:delpointerpos A</span> - Delete global pointer position stored at the "A" key</li>
            <li><span class="command-block">:delpointerpos a vieb.dev</span> - Delete all pointer positions stored at the "a" for vieb.dev</li>
            <li><span class="command-block">:delpointerpos a *</span> - Delete all pointer positions stored at the "a" key</li>
            <li><span class="command-block">:delpointerpos!</span> - Delete all local pointer positions for the current domain/url</li>
            <li><span class="command-block">:delpointerpos! vieb.dev</span> - Delete all local pointer positions for vieb.dev</li>
            <li><span class="command-block">:delpointerpos! *</span> - Delete all pointer positions, including global ones</li>
            <li><span class="command-block">:delpointerpos! local</span> - Delete all local pointer positions</li>
            <li><span class="command-block">:delpointerpos! global</span> - Delete all global pointer positions</li>
        </ul>
        With this command you can delete any previously stored <a class="pointer" href="#pointer">pointer</a> positions by key, domain or url. Whether it uses the domain or the url is controlled by <a href="#pointerposlocalid">pointerposlocalid</a>. Without a confirm override "!", it will always require a key to delete, which is by default only for the local ones at the current domain/url or the global ones. If you pass a domain/url, you can delete the key for a different domain/url, where "*" will match all of them including global ones. If you do supply the "!" confirm override, you can delete any key in one go, by default for the current domain/url, but you can also supply one. In case you supply "*", "local" or "global", it will delete ALL, local or global positions respectively.
        <h2>Tab close commands</h2>
        These are commands that can be used to close tabs. The regular close command without arguments is used to close the current tab.
        <h3 id=":close">:close</h3>
        <ul>
            <li><span class="command-block">:close</span> - Close the current tab</li>
            <li><span class="command-block">:close!</span> - Close the current tab, even if pinned</li>
            <li><span class="command-block">:close vieb.dev</span> - Close the first tab matching vieb.dev</li>
            <li><span class="command-block">:close! 5</span> - Close the 6th tab (first tab is 0), even if pinned</li>
            <li><span class="command-block">:close #</span> - Close the <a href="#lastusedtab">last used tab</a></li>
            <li><span class="command-block">:close -1</span> - Close the last tab</li>
        </ul>
        Closes a tab. It will close the current one, if no arguments are given. If there is a single number given as an argument, it will close the tab with that index in the tabbar (starting at 0). Any other arguments are used to search for the matching tab to close. Only the first matching tab is closed. If closing the current tab, you will switch to the nearest opened tab. If it's a pinned tab, you can only close it with <span class="command-block">:close!</span> or you need to enable <a href="#closablepinnedtabs">closablepinnedtabs</a>. If the last tab is closed, the newtab page will (re)open as the only opened tab. If desired, you can quit Vieb when closing the last tab by enabling the <a href="#quitonlasttabclose">quitonlasttabclose</a> toggle. Opposite of <a href="#action.reopenTab">action.reopenTab</a>. You can change which tab gets focused when calling this command for the current tab with <a href="#tabclosefocus">tabclosefocus</a>.
        <h3 id=":lclose">:lclose</h3>
        <ul>
            <li><span class="command-block">:lclose</span> - Closes all regular tabs to the left of the current tab</li>
            <li><span class="command-block">:lclose!</span> - Closes ALL tabs, even pinned, to the left of the current tab</li>
        </ul>
        With this command you can close every tab to the left of the current one. If you have pinned tabs, it will respect the <a href="#closablepinnedtabs">closablepinnedtabs</a> setting and try to close as many as possible, so you can even execute this command when your current tab is pinned. You can override this setting by appending a "!" to this command.
        <h3 id=":rclose">:rclose</h3>
        <ul>
            <li><span class="command-block">:rclose</span> - Closes all regular tabs to the right of the current tab</li>
            <li><span class="command-block">:rclose!</span> - Closes ALL tabs, even pinned, to the right of the current tab</li>
        </ul>
        With this command you can close every tab to the right of the current one. If you have pinned tabs, it will respect the <a href="#closablepinnedtabs">closablepinnedtabs</a> setting and try to close as many as possible, so you can even execute this command when your current tab is pinned. You can override this setting by appending a "!" to this command.
        <h2>Other commands</h2>
        The commands in this paragraph do not belong in a specific category, but are still a core part of Vieb. These commands range from printing, to developer tools and to quitting Vieb.
        <h3 id=":call">:call</h3>
        <ul>
            <li><span class="command-block">:call &lt;toSearchMode&gt;</span> - Switch to <a class="search" href="#search">search mode</a> using a command</li>
            <li><span class="command-block">:call gi</span> - Press the keys "g" and "i" in order, which is by default mapped to <a href="#action.insertAtFirstInput">action.insertAtFirstInput</a></li>
        </ul>
        The call command can be used to execute any arbitrary arguments as a if it was mapped with <a href="#:map">:map</a>. The advantage is that you don't have to create a mapping to execute built-in actions or test the righthand side of a map command, but you can just prefix it will "call" to run it immediately. For repeating more advanced actions, see <a href="#record">record</a>.
        <h3 id=":write">:write</h3>
        <ul>
            <li><span class="command-block">:write</span> - Save the current page to <a href="#downloadpath">downloadpath</a> with the page name as the filename</li>
            <li><span class="command-block">:write savedpage</span> - Save the current page to <a href="#downloadpath">downloadpath</a> with "savedpage.html" as the filename</li>
            <li><span class="command-block">:write savedpage/</span> - Save the current page to the "savedpage" subfolder of <a href="#downloadpath">downloadpath</a> with the page name as the filename</li>
            <li><span class="command-block">:write ~/Documents/savedpage</span> - Save the current page to "~/Documents/" with "savedpage.html" as the filename</li>
            <li><span class="command-block">:write savedpage mhtml</span> - Save the current page to <a href="#downloadpath">downloadpath</a> as MHTML with "savedpage.mhtml" as the filename</li>
            <li><span class="command-block">:write html savedpage/</span> - Save the current page to the "savedpage" subfolder of <a href="#downloadpath">downloadpath</a> with the page name as the filename</li>
            <li><span class="command-block">:write ~/Documents/savedpage mtml</span> - Save the current page to "~/Documents/" as MHTML with "savedpage.mhtml" as the filename</li>
            <li><span class="command-block">:write mhtml ./savedpage</span> - Save the current page to <a href="#downloadpath">downloadpath</a> as MHTML with "savedpage.mhtml" as the filename</li>
        </ul>
        With the write command you can save the current page to disk. There are two optional arguments, one serves as both the filename and the location, the other lets you choose betwee HTML and HTML. The order of the arguments is automatically detected, either order works. The location is by default set to the <a href="#downloadpath">downloadpath</a> setting, but can be changed by including it in the filename argument. If the filename ends with a "/", it's assumed to be just the folder part, and the page will be saved in that folder with the default filename (the name of the page). Lastly, absolute paths are saved in exactly that location. The write command attempts to save pages as an HTML website (optionally with an assets folder of the same name), unless the "mhtml" argument is provide meaning that it will be saved as a single <a href="https://en.wikipedia.org/wiki/MHTML">MHTML</a> archive. To download just the current page url as a file, see <a href="#action.downloadLink">action.downloadLink</a>.
        <h3 id=":screencopy">:screencopy</h3>
        <ul>
            <li><span class="command-block">:screencopy</span> - Copy an image of the current page to the clipboard</li>
            <li><span class="command-block">:screencopy 200,300,400,500</span> - Copy an image of a region in the current page to the clipboard, with a width of 200, a height of 300, starting at x 400 and y 500</li>
        </ul>
        Using the screencopy command you can copy an image of the current page to the clipboard. You can optionally specify a specific region of the page to capture. For more details see the <a href="#:screenshot">:screenshot</a> command.
        <h3 id=":screenshot">:screenshot</h3>
        <ul>
            <li><span class="command-block">:screenshot</span> - Save an image of the current page to <a href="#downloadpath">downloadpath</a> with the page name as the filename</li>
            <li><span class="command-block">:screenshot savedimage</span> - Save an image of the current page to <a href="#downloadpath">downloadpath</a> with "savedimage.png" as the filename</li>
            <li><span class="command-block">:screenshot savedimage/</span> - Save an image of the current page the "savedimage" subfolder of <a href="#downloadpath">downloadpath</a> with the page name as the filename</li>
            <li><span class="command-block">:screenshot ~/Documents/savedimage</span> - Save an image of the current page to "~/Documents/" with "savedimage.png" as the filename</li>
            <li><span class="command-block">:screenshot 400,300,200,100</span> - Save an image of the current page to <a href="#downloadpath">downloadpath</a> with the page name as the filename, using a width of 400, a height of 300, a start x of 200 and a start y of 100</li>
            <li><span class="command-block">:screenshot ~/Documents/savedimage 50,60,70,80</span> - Save an image of the current page to "~/Documents/" with "savedimage.png" as the filename, using a width of 50, a height of 60, a start x of 70 and a start y of 80</li>
        </ul>
        With the screenshot command you can save a PNG image of the current page to disk. There are two optional arguments, one of which serves as both the filename and the location. The location is by default set to the <a href="#downloadpath">downloadpath</a> setting, but can be changed by including it in the filename argument. If the filename ends with a "/", it's assumed to be just the folder part, and the page will be saved in that folder with the default filename (the name of the page). Lastly, absolute paths are saved in exactly that location. Due to Electron limitations, you can only capture the visible part of the page and not the full webpage, this is also the reason for a transparent background on sites that don't have a background set. The other optional argument is for specifying a region on the page that should be captured. This can be done in the form of "width,height,x,y", and can appear as the only argument, before the filename or after the filename. All four numbers are required if the region is to be provided, and they must all be round integers. If the numbers go out of range of the page, the numbers will be adjusted automatically. By default there will also be an orange outline visible on the page that shows the area that will appear in the final screenshot. This can be hidden or styled differently using <a href="#:colorscheme">colorschemes</a>. You can drag this orange outline to update the region argument of the command if the "screenshotframe" feature is enabled using the <a href="#mouse">mouse</a> setting.
        <h3 id=":hardcopy">:hardcopy</h3>
        <ul>
            <li><span class="command-block">:hardcopy</span> - Open the print dialog, to print the current page</li>
        </ul>
        With the hardcopy command you can make a hardcopy of the current page using a printer. This will open the print dialog similar to other programs. There are no arguments for this command. Tip: it's also possible to do this for <a href="#specialpages">specialpages</a> such as this help page.
        <h3 id=":print">:print</h3>
        Identical to <a href="#:hardcopy">:hardcopy</a>.
        <h3 id=":mute">:mute</h3>
        <ul>
            <li><span class="command-block">:mute</span> - Toggle the audio playback status of the tab</li>
            <li><span class="command-block">:mute! true</span> - Mute the tab, even if already muted</li>
            <li><span class="command-block">:mute! false</span> - Unmute the tab, even if not muted</li>
        </ul>
        With the mute command you can toggle if tabs can play audio. If a tab is playing audio, a blue indicator is shown. The indicator is white for muted tabs. When a tab is muted but tries to play audio, a light yellow indicator is shown. The orange indicator is not related to audio, but is used to highlight the current tab when <a href="#splitting">splitting</a> multiple pages. The mute status is kept when restarting Vieb with <a href="#restoretabs">restoretabs</a> enabled, but not when closing tabs. By appending "!" and a state you can force a specific mute state, which can be especially powerful when combined with <a href="#ranges">ranges</a>, for example to mute all tabs: <span class="command-block">:%mute! true</span>.
        <h3 id=":suspend">:suspend</h3>
        <ul>
            <li><span class="command-block">:suspend 0</span> - Suspend the first tab in the tab bar</li>
            <li><span class="command-block">:suspend 4</span> - Suspend the 5th tab in the tab bar</li>
            <li><span class="command-block">:suspend #</span> - Suspend the <a href="#lastusedtab">last used tab</a></li>
            <li><span class="command-block">:suspend github</span> - Suspend the first tab matching github</li>
        </ul>
        The suspend command can unload tabs from the memory. The entire tab is suspended and won't run in the background. You must specify a non-visible tab for the command to work. When switching to a suspended tab, the page is loaded from scratch again. Suspended tabs have a different background color from regular tabs. Besides this command, you can also suspend them automatically on startup with <a href="#suspendonrestore">suspendonrestore</a> or on a timer with <a href="#suspendtimeout">suspendtimeout</a>.
        <h3 id=":pin">:pin</h3>
        <ul>
            <li><span class="command-block">:pin</span> - Toggle the pinned status of the tab</li>
            <li><span class="command-block">:pin! true</span> - Pin the tab, even if already pinned</li>
            <li><span class="command-block">:pin! false</span> - Unpin the tab, even if not pinned</li>
        </ul>
        This command is used to pin or unpin the current tab. The pinned status of the current tab will be toggled. Pinned tabs have a fixed width of just the icon and can be the only tabs restored, depending on the <a href="#restoretabs">restoretabs</a> setting. Pinned tabs are always displayed before regular tabs. By appending "!" and a state you can force a specific pinned state, which can be especially powerful when combined with <a href="#ranges">ranges</a>, for example to unpin all tabs: <span class="command-block">:%pin! false</span>.
        <h3 id=":runjsinpage">:runjsinpage</h3>
        <ul>
            <li><span class="command-block">:runjsinpage document.body.style.backgroundColor = "#fff"</span> - Make a background white for any page</li>
            <li><span class="command-block">:runjsinpage console.log(navigator.userAgent)</span> - Log a value to the developer console</li>
            <li><span class="command-block">:runjsinpage ~/scripts/autofill.js</span> - Load the autofill.js file from disk and execute it as JavaScript in the page</li>
        </ul>
        With this command you can run any custom JavaScript you would like in the current page. The above are just some of the examples of what is possible, but basically any script you would like to run can be pased on with this command. The logging happens and remains inside the page and can be viewed in the "Console" tab of the page <a href="#:devtools">:devtools</a>. You can also pass an absolute file path to this command to run the contents of said file as JavaScript inside the page. You can also use <a href="#ranges">ranges</a> to run the JavaScript on other pages besides the current one.
        <h3 id=":translatepage">:translatepage</h3>
        <ul>
            <li><span class="command-block">:translatepage</span> - Translate the current page to the language set by <a href="#translatelang">translatelang</a></li>
            <li><span class="command-block">:translatepage en-us</span> - Translate the page to American English</li>
            <li><span class="command-block">:translatepage ja</span> - Translate the page to Japanese</li>
        </ul>
        Using this command you can translate the current page to a language of your choice based on the translation api set by <a href="#translateapi">translateapi</a> (if set to "auto", it's based on <a href="#translateurl">translateurl</a>). You can either use the language set by <a href="#translatelang">translatelang</a> or pass a language as an argument. All text is translated either by Deepl or LibreTranslate and then put back into the page. For most configurations you must set the <a href="#translatekey">translatekey</a> before you can use this command.
        <h3 id=":nohlsearch">:nohlsearch</h3>
        <ul>
            <li><span class="command-block">:nohlsearch</span> - Disable the search highlighting while storing the search</li>
        </ul>
        This command is used clear all visible search highlights, while retaining the search string. You can then show the highlighting again by calling <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a>. If you want to clear the highlighting without remembering the search, use <a href="#action.emptySearch">action.emptySearch</a> instead.
        <h3 id=":devtools">:devtools</h3>
        <ul>
            <li><span class="command-block">:devtools</span> - Open the developer tools of the current page in the location configured with <a href="#devtoolsposition">devtoolsposition</a></li>
            <li><span class="command-block">:devtools window</span> - Open the developer tools of the current page in a new window</li>
            <li><span class="command-block">:devtools tab</span> - Open the developer tools of the current page in a new tab</li>
        </ul>
        The devtools command can be used to open the developer tools of the current page. If no argument is given for the devtools position, it will open at the position configured by <a href="#devtoolsposition">devtoolsposition</a>. The accepted positions for this command are the same as that of the setting. It's not possible to open multiple instances of the devtools for the same page, you can open one type of devtools per tab. You can change the theme of the devtools on startup with "--devtools-theme" or the ENV variable "VIEB_DEVTOOLS_THEME" (see "--help" for details), as this cannot be changed dynamically (although you can still change it in the devtools settings). If the devtools are opened as a Vieb tab or split (so not windowed) all regular Vieb actions can be used to interact with the developer tools.
        <h3 id=":internaldevtools">:internaldevtools</h3>
        <ul>
            <li><span class="command-block">:internaldevtools</span> - Open the developer tools of the Vieb main browser window</li>
        </ul>
        The internaldevtools command opens the developer tools of the main Vieb window (containing the url bar, tab list etc.). This is mainly useful to debug Vieb itself, like making colorschemes or finding internal errors. You can also open these tools when starting Vieb with the "--devtools" startup argument. You can change the theme of the devtools on startup with "--devtools-theme" or the ENV variable "VIEB_DEVTOOLS_THEME" (see "--help" for details), as this cannot be changed dynamically (although you can still change it in the devtools settings).
        <h3 id=":colorscheme">:colorscheme</h3>
        <ul>
            <li><span class="command-block">:colorscheme</span> - Show the currently active colorscheme</li>
            <li><span class="command-block">:colorscheme light</span> - Activate the 'light' colorscheme</li>
        </ul>
        With the colorscheme command you can apply custom colorschemes (also called "themes"). There are a couple of themes bundled with Vieb and you can also add your own themes. These themes can change more than just colors, as they are written in CSS. All built-in styling is part of the default theme, and can be overwritten with a custom theme. You can find the default and other example colorschemes in "app/colors", which can be viewed <a href="https://github.com/Jelmerro/Vieb/tree/master/app/colors/" target="_blank">on Github here</a>. If you just want to change the colors, you just need the lines within ":root", but you can add as much CSS as you want. Custom themes can be stored in a "colors" subfolder of the <a href="#datafolder">datafolder</a>: "&lt;datafolder&gt;/colors/&lt;name&gt;.css". You can also store themes in "~/.vieb/colors". All colorschemes extend the default theme, so there is no need to copy those values if you don't plan to change them. When <a href="#suggestcommands">suggestcommands</a> is enabled, the colorscheme command will suggest both built-in and custom themes. Themes are also used to style <a href="#specialpages">special pages</a>, while you can style any page with the <a href="#userstyle">userstyle</a> setting (depending on <a href="#userstylescope">userstylescope</a>) and control the external page "prefers-color-scheme" CSS preference with <a href="#nativetheme">nativetheme</a> to let pages know your preferred theme.
        <h3 id=":makedefault">:makedefault</h3>
        <ul>
            <li><span class="command-block">:makedefault</span> - Attempt to set Vieb as the default webbrowser of the operating system</li>
        </ul>
        This command attempts to make Vieb the default browser on your operating system. On Linux, this uses the "xdg-settings" command, and requires Vieb to be installed with a desktop file (most installers have this included). For Windows, this command will add the required keys to regedit for Vieb to appear in the default program list, after which you probably need to select it as your default browser manually. For other operating systems, Vieb will request to be set as the default handler for http and https protocols, though this probably isn't enough to be made the default browser. You can find the default app scripts in <a href="https://github.com/Jelmerro/Vieb/tree/master/app/defaultapp">this subfolder of the source code</a>, including a file to clear the Windows registry of all Vieb entries.
        <h3 id=":quit">:quit</h3>
        <ul>
            <li><span class="command-block">:quit</span> - Close the current window split, or quit Vieb if only one is open</li>
        </ul>
        The quit command will only exit Vieb if there is only one window split left. If there are multiple open, it will simply close the current split. This logic is only applied to opened splits, the amount of tabs you have open is irrelevant for the quit command. To unconditionally quit Vieb, see <a href="#:quitall">:quitall</a>.
        <h3 id=":quitall">:quitall</h3>
        <ul>
            <li><span class="command-block">:quitall</span> - Quit Vieb</li>
        </ul>
        With quitall you will unconditionally close and stop all of Vieb. The short version of this command is "qa". To configure what gets cleared on quit, see these settings, among others: <a href="#cache">cache</a>, <a href="#clearcookiesonquit">clearcookiesonquit</a>, <a href="#cleardownloadsonquit">cleardownloadsonquit</a>, <a href="#clearhistoryinterval">clearhistoryinterval</a>, <a href="#clearlocalstorageonquit">clearlocalstorageonquit</a>, <a href="#keeprecentlyclosed">keeprecentlyclosed</a>, <a href="#restoretabs">restoretabs</a> and <a href="#containernewtab">containernewtab</a>.
        <h1 id="settings">Settings</h1>
        There are a lot of settings in Vieb and all of them can be changed at runtime, or using a settings file. The changes you make at runtime are not saved automatically for subsequent sessions, but they can be if you want to. This chapter provides introductions on how to do all this, and a list of all the settings Vieb has to offer.
        <h2>Set command</h2>
        To change settings at runtime, the <a href="#:set">:set</a> command is used. This command can read, write and update any setting for the current session. Please read it first to learn how to change settings, and what type of values there are. To change settings permanently, read the following paragraph regarding the viebrc file.
        <h2 id="viebrc">Viebrc</h2>
        To change settings for subsequent sessions, store them as commands in a viebrc file. The viebrc file should contain a single command per line. Most regular commands are supported, such as set commands or map commands. Basically, the viebrc file should be a list of commands you want to execute every time Vieb is started. There can be multiple viebrc files loaded on startup, there are four potential locations that are checked:
        <ul>
            <li><kbd>datafolder/viebrc</kbd> - This datafolder viebrc file will be stored in Vieb's <a href="#datafolder">datafolder</a>. The datafolder viebrc file can be generated based on the current settings using the <a href="#:mkviebrc">:mkviebrc</a> command, unless it's overwritten by the "--config-file" startup argument.</li>
            <li><kbd>~/.vieb/viebrc</kbd> - This user viebrc should be placed in a ".vieb" directory in the user folder. Vieb will only read this file, and will never write to it.</li>
            <li><kbd>~/.viebrc</kbd> - This user viebrc should be placed directly in the user directory. Vieb will only read this file, and will never write to it.</li>
            <li><kbd>--config-file=</kbd> argument - This can be any file on disk that will be loaded instead of the three locations above. If this file is provided, the <a href="#:mkviebrc">:mkviebrc</a> command will write here instead.</li>
        </ul>
        You can control the order in which these viebrc files are loaded, and if they should be loaded at all using the "--config-order" argument. By default, this argument is set to "user-first", which means this is the order of viebrc files: "~/.viebrc", "~/.vieb/viebrc", "datafolder/viebrc". This order is reversed for the "datafolder-first" option. You can also choose to load only specific configs with "user-only" or "datafolder-only". Finally, there is also the "none" option, to load Vieb without any config file. The "--config-order" argument is ignored and overwritten if there is a "--config-file" provided, which only loads the file you specify instead of other locations above. The <a href="#:mkviebrc">:mkviebrc</a> will write to the datafolder viebrc, unless a different viebrc is provided with "--config-file". You can see the list of loaded viebrc scripts using <a href="#:scriptnames">:scriptnames</a>.
        <h3 id="examples">Examples</h3>
        There are example viebrc files to give you a starting point for your own configuration. These example configs aim to provide a similar experience to other browsers. The viebrc example files are available offline, and can be saved to the downloads folder with the buttons below.
        <div class="example-buttons"></div>
        After writing one of these examples to the <a href="#downloadpath">downloadpath</a> you can view and edit it with Vim or any other editor. If you want to use one of these examples, copy it to either of the <a href="#viebrc">viebrc</a> locations explained above. Alternatively you can also run any file from disk as a config using the <a href="#:source">:source</a> command. You can also view the <a href="https://github.com/Jelmerro/Vieb/tree/master/app/examples">examples on Github</a>.
        <h2 id="datafolder">Data folder</h2>
        Vieb stores all of its data inside a single folder, which is by default located in one of these locations:
        <ul>
            <li>Linux - <kbd>~/.config/Vieb/</kbd>
            <li>Windows - <kbd>%APPDATA%\Vieb\</kbd>
            <li>Mac - <kbd>~/Library/Application Support/Vieb/</kbd>
        </ul>
        All browsing history, cache, cookies, localstorage, favicons, preferences, tab history and download history are stored in this folder. You can also store all Vieb data in a different folder by starting it with the "--datafolder" argument. For example, to use a relative folder named "ViebData": <kbd class="nowrap">vieb --datafolder=ViebData</kbd>. Since the instance <a href="#viebrc">viebrc</a> and <a href="#:colorscheme">colorschemes</a> are also inside this folder, you can use this to have a completely portable instance of Vieb. Start Vieb with the "--help" argument to see other startup arguments. Besides the datafolder, you can choose to store user specific configuration files in "~/.vieb/", this can be done for the <a href="#viebrc">viebrc</a>, <a href="#:colorscheme">colorschemes</a>, <a href="#userstyle">userstyles</a>, <a href="#userscript">userscripts</a> and <a href="#adblocker">blocklists</a>. For the viebrc, datafolder config will take priority of user config by default, but this can be changed with the "--config-order" startup argument, see <a href="#viebrc">viebrc</a> for details. You can also specify a single config file that should be used as the only viebrc, using: "--config-file".
        <h2 id="erwic">Erwic mode</h2>
        With the "erwic" startup option, you can "Easily Run Websites In Containers". The purpose of this option is similar to programs such as Franz, Ferdi or Rambox. It can also replace other Electron-based desktop apps such as Slack or Discord. These instances of Vieb can run separately from your existing Vieb. See <a href="https://github.com/Jelmerro/Vieb/blob/master/Erwic.md">Erwic.md on Github</a> for usage and details.
        <h2>Setting list</h2>
        The rest of this chapter will focus on all the different settings of Vieb.
        <h3 id="adblocker">adblocker</h3>
        Vieb has an integrated adblocker, which will block advertisements and trackers based on blocklists. These blocklists are by default set to easylist, easyprivacy and ublock filters, but this can be extended. This setting is used to enable or disable the adblocker, but also to configure the update mechanism. The "static" value will use the static integrated blocklists and will not check for updates. These integrated lists are only updated when a new Vieb release is made. You can still add extra lists to use by adding ".txt" filter files to the "blocklists" folder inside your <a href="#datafolder">datafolder</a>. To enable automatic updates of these lists without waiting for a new Vieb release, you can change this setting to "update". Keep in mind that this will periodically connect to the blocklist websites to download the latest version, which is also why this setting is set to "static" by default. Setting it to "update", also allows you to create a "list.json" file inside the "blocklists" folder, which should look similar to <a href="https://github.com/Jelmerro/Vieb/blob/master/app/blocklists/list.json">the default list.json</a>, that allows you to add extra lists that should be updated when starting Vieb or updating this setting. The JSON file has a user-defined name as the key, and the values should be URLs that point directly to the blocklist filtering file on the web. The "update" value is the most powerful and useful option of the adblocker, and is recommended if you do not mind the extra web requests. Finally there is the "custom" option that allows you to implement your own external blocklist management and also stops copying any of the built-in lists on startup. Adding other lists can already be done without using the "custom" option, by adding lists to the "blocklists" folder inside Vieb's <a href="#datafolder">datafolder</a>, the custom option is most useful for people who do not want the default lists, nor the update feature, but do want to use other blocklists. You can also add lists that you want to load for all instances to the "~/.vieb/blockists/" folder. As long as the value of the adblocker setting is not "off", it will read all ".txt" files in both the global and the local blocklists folder and enable all filtering blocklists found. The "static", "update" and "custom" values merely control if you want the default lists or not ("static" vs "custom"), and if you want auto updating or not ("update" or "custom"). With "update" you always get the default lists, but you can overwrite the url for "easylist", and if desired, the url can also be empty, in which case the list will not be fetched.
        <h3 id="adblockernotifications">adblockernotifications</h3>
        Using this setting you can configure which adblocker notifications should be shown directly. By default, all notifications are shown as a regular notification and then added to the <a href="#:notifications">notifications</a> page. The setting accepts a few options that control which type of notifications should be shown. Notifications not shown to the user  can still be found on the <a href="#:notifications">notifications</a> page later. To only show the notifications for lists being loaded successfully or giving errors, use "done". This means you will not be notified when updating starts, but only when it is done or gave an error. Similarly, you can choose to only show errors with "error", and not be notified when updating starts nor when it was successfully applied. In case you do not want to see any such notifications directly you can use "none", but it is recommended to at least keep the error messages to know when a list was not successfully updated. For lite releases, this setting can also be useful to set to "none" as there is no adblocker module present.
        <h3 id="cache">cache</h3>
        This setting can be used to disable or automatically remove the browsing cache. Changing this setting from or to the value "off" only has effect at startup, due to Chromium limitations. The cache can always be set to "clearonquit" or "full", regardless of the initial value of this setting. It's recommended to at least clear the cache on quit, because the browsing cache can get very large with extended periods of use.
        <h3 id="clearcookiesonquit">clearcookiesonquit</h3>
        Toggle for clearing all of the cookies when quitting Vieb. To view and remove individual cookies, see the <a href="#:cookies">cookies</a> page. This toggle applies to all containers.
        <h3 id="cleardownloadsoncompleted">cleardownloadsoncompleted</h3>
        Toggle for clearing successfully completed downloads. When a download fails, it will not be cleared. This toggle will clear completed downloads as soon as they are done, unlike the <a href="#cleardownloadsonquit">cleardownloadsonquit</a> setting, which will unconditionally clear all downloads when quitting Vieb regardless of download status.
        <h3 id="cleardownloadsonquit">cleardownloadsonquit</h3>
        Toggle for clearing all downloads regardless of status when quitting Vieb. This will not remove downloaded files from disk, but it will clear the download history.
        <h3 id="clearhistoryinterval">clearhistoryinterval</h3>
        Setting to automatically clear the history on quit based on how old it is. The browsing history can be viewed on the <a href="#:history">history</a> page. By default, no history is cleared, as the clearing interval is set to "none". If you want to clear all history data on quit set it to "session". For any finer grained interval of how old the history must be for it to be cleared, set an interval such as "1day" or "3months" as the value. This way, history older than the specified interval will be cleared on quit. See the <a href="#interval">interval</a> docs for valid options. As a result of separating tab, download and browsing history, there is no traditional private mode in Vieb. See <a href="#storenewvisits">storenewvisits</a> for more details about storing history and an alternative to "private mode".
        <h3 id="clearlocalstorageonquit">clearlocalstorageonquit</h3>
        Toggle for clearing all of the localstorage when quitting Vieb. This toggle applies to all containers.
        <h3 id="closablepinnedtabs">closablepinnedtabs</h3>
        With this toggle you can specify if pinned tabs should be closable. By default, you need to unpin a tab (using <kbd class="command-block">:pin</kbd>) to close it. If this setting is enabled, you can close pinned tabs like any other regular tab. Alternatively, you can append any close command with "!" to override this setting.
        <h3 id="commandhist">commandhist</h3>
        This setting can be used to control which commands should be available from the history when using <a href="#action.commandHistoryPrevious">action.commandHistoryPrevious</a> and <a href="#action.commandHistoryNext">action.commandHistoryNext</a>. By default, only commands executed by the user with <a href="#action.useEnteredData">action.useEnteredData</a> from <a class="command" href="#command">command mode</a> will be stored. They will also be written to disk for subsequent sessions if set to "persist". To also store commands executed by mappings and other sources, set this setting to "all". When set to "none", no history of executed commands will be stored from now on. The value of the setting is either "all" or "useronly", optionally prefixed with "persist" to also store the commands to a "commandhist" file in the <a href="#datafolder">datafolder</a>. Commands executed before disabling the history will still be available from disk/memory depending on the value of this setting at the time of execution. It's always safe to delete the "commandhist" file, as Vieb only reads it at startup and only appends it when you run a command.
        <h3 id="containercolors">containercolors</h3>
        A setting to give containers a custom color based on their name. Each element in the list contains a regular expression and a color name (or color hex) separated by a "~". By default, temporary containers are displayed in yellow, while all others will use the default color of the <a href="#:colorscheme">:colorscheme</a>. The first matching entry will be used as the color of the tab title. The color will also be used to show the name of the container in the navbar, if <a href="#containershowname">containershowname</a> is on. An example could be to make a container for work, school or other miscellaneous tasks and color it accordingly:
        <div class="command-block">:set containercolors=^work$~lightblue,^school~#f00,^misc$~lime</div>
        This will display the "work" container in lightblue, all containers starting with "school" in red and the "misc" container in lime. All CSS color names and (3 or 6 digit) hex codes are accepted. For more about containers and how to use them, see <a href="#containernewtab">containernewtab</a>. You can also set the above example with any of these Array or Object based syntaxes:
        <div class="command-block">:set containercolors=["^work$~lightblue", "^school~#f00", "^misc$~lime"]</div>
        <div class="command-block">:set containercolors=[["^work$", "lightblue"], ["^school", "#f00"], ["^misc$", "lime"]]</div>
        <div class="command-block">:set containercolors={"^work$": "lightblue", "^school": "#f00", "^misc$": "lime"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="containerkeeponreopen">containerkeeponreopen</h3>
        Toggle to indicate if tabs that are restored with <a href="#action.reopenTab">action.reopenTab</a> should keep the container they were opened in before. If enabled, they will keep the same container as before. If disabled, the value of <a href="#containernewtab">containernewtab</a> will be used as the container name instead. This toggle does not affect tabs that are opened using other ways, such as startup urls, which use the <a href="#containerstartuppage">containerstartuppage</a> setting. The <a href="#restoretabs">restoretabs</a> setting to keep tabs after a Vieb restart will always use the same container they used before shutting down Vieb.
        <h3 id="containernames">containernames</h3>
        A setting to automatically pick a custom container name based on the url you have just opened (regardless of origin). Overrides any of the other container name settings like <a href="#containernewtab">containernewtab</a> or <a href="#containersplitpage">containersplitpage</a>, with the sole exception of tab reopening (if <a href="#containerkeeponreopen">containerkeeponreopen</a> is set) and opening a new custom container yourself with <a href="#:tabnewcontainer">:tabnewcontainer</a>. You can have as many automatic names in the list as you would like, each of which requires a regex pattern and a name, which are separated with a "~", all of which are in a list that is comma-separated. Optionally, you can add a "~newtab" suffix to only use that automatic rule for opening new tabs. By default they will also replace the current tab's container with the right one, as configured by this setting. For example, to always open pages like "youtube" or "google" in their own container, you could do something like this:
        <div class="command-block">:set containernames=.*youtube.com.*~youtube,.*google.*~google</div>
        Please keep in mind that the tab history is not kept when you switch to a new container. The name set for the first matching pattern will be used, regardless of any other potential matches in the list. The regular expressions to match with the url in this example are not waterproof to match only youtube and google domains, but will also match any other url that contains these words. A more accurate regex pattern that will only trigger in new tabs could look like this:
        <div class="command-block">set containernames=^https?://([a-zA-Z0-9]+\.)*youtube\.com.*~youtube~newtab</div>
        For this setting, you can also use the Array or Object based syntaxes:
        <div class="command-block">:set containernames=[".*youtube.com.*~youtube", ".*google.*~google"]</div>
        <div class="command-block">:set containernames=[[".*youtube.com.*", "youtube"], [".*google.*", "google"]]</div>
        <div class="command-block">:set containernames={".*youtube.com.*": "youtube", ".*google.*": "google"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="containernewtab">containernewtab</h3>
        With this setting you can specify the name of the container that new tabs will use. Regular names can use letters, numbers and underscores. Each container with a separate name will run isolated from other tabs. This includes cookies, localstorage, cache and other browsing data, but not the history or downloads. Multiple tabs with the same name will share the same container and share data with each other. The container name that you specify with this setting can include "%n", which will be replaced with an incrementing number. This can be used as a way to use a different container every time a tab is opened. If the name starts with "temp", the data of that container is deleted when Vieb is shutdown. The default container name is "main". When you don't update any settings, all tabs will use the "main" container to store their data. To make every tab store data in a temporary separate container, you could set this setting to "temp%n".
        <h4>Special values</h4>
        Besides regular strings to use directly as the container name, there are also some special values that will automatically pick the right container name for you. For the containernewtab setting, these special values exist:
        <ul>
            <li><kbd>s:usematching</kbd> - Uses the container name of a tab that has the same domain as the new tab that is being opened. If no matching tab is found, it will fall back to the container of the current tab. Tabs are searched in order of appearance in the tabbar.</li>
            <li><kbd>s:replacematching</kbd> - Same as above, but navigate to the url in the matched tab, instead of opening a new tab.</li>
            <li><kbd>s:usecurrent</kbd> - Uses the name of the container from the current tab as the container name for the new tab</li>
            <li><kbd>s:replacecurrent</kbd> - Same as above, but navigate to the url in the current tab, instead of opening a new tab.</li>
            <li><kbd>s:external</kbd> - When set to this special value, new tabs will open in the external default browser. No tabs will be opened in Vieb, you can configure the location with <a href="#externalcommand">externalcommand</a></li>
        </ul>
        One of the many ways to make changing this option more straightforward to use, could be to make a command to open a tab in a specific container and switch back to <kbd>s:usecurrent</kbd> automatically after that:
        <div class="command-block">:command! work &lt;:set containernewtab=work&gt;&lt;:tabnew&gt;&lt;:set containernewtab=s:usecurrent&gt;</div>
        You could make such a command for each different container you frequently use, while still opening tabs in the same container as the current one by default. If you don't want to make a custom command for it, but still be able to open a tab in a custom container, either use <a href="#:tabnewcontainer">:tabnewcontainer</a>, or make a list of container name overrides with <a href="#containernames">containernames</a> to run <a href="#:tabnew">:tabnew</a> and get the container you want right away.
        <h4>Related settings</h4>
        It is recommended to combine this with <a href="#containercolors">containercolors</a> to automatically color container names based on regular expressions. You can configure when to display the name of the container in the navbar with <a href="#containershowname">containershowname</a>. New tabs opened as links and through the <a class="follow" href="#action.startFollowNewTab">new tab version of follow mode</a> are configured with this "containernewtab" setting. For tabs opened as a split window, such as when using <a href="#:Vexplore">:Vexplore</a> or the <a class="follow" href="#action.startFollowNewSplit">split version of follow mode</a>, see <a href="#containersplitpage">containersplitpage</a>. For pages opened using the command line arguments, see <a href="#containerstartuppage">containerstartuppage</a>. All of the mentioned settings can be overriden using <a href="#containernames">containernames</a>, which you can use to automatically pick a name for a tab (or split) if it matches a specific regex pattern.
        <h3 id="containershowname">containershowname</h3>
        This setting controls if the container name should be shown in the navbar between the current mode and the url bar. If set to automatic, all names except "main" are shown. The name will be displayed in the color defined by <a href="#containercolors">containercolors</a>.
        <h3 id="containersplitpage">containersplitpage</h3>
        Similar to <a href="#containernewtab">containernewtab</a>, but specifically applies to tabs opened as a split page, using the <a href="#splits">window split commands</a> or the <a class="follow" href="#action.startFollowNewSplit">split version of follow mode</a>. This setting only supports regular names and the special names: <kbd>s:usematching</kbd> and <kbd>s:usecurrent</kbd>. See <a href="#containernewtab">containernewtab</a> for usage and details.
        <h3 id="containerstartuppage">containerstartuppage</h3>
        Similar to <a href="#containernewtab">containernewtab</a>, but specifically applies to pages that are passed to Vieb as a command line argument. If Vieb is your default browser, this includes urls that you click on outside of Vieb, that are configured to open with Vieb. This setting only supports the special names: <kbd>s:usematching</kbd>, <kbd>s:usecurrent</kbd>, <kbd>s:replacematching</kbd> and <kbd>s:replacecurrent</kbd>. See <a href="#containernewtab">containernewtab</a> for usage and details.
        <h3 id="countlimit">countlimit</h3>
        This setting is used as an upper limit of the counter for repeating actions in <a class="normal" href="#normal">normal mode</a>, <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a>. For example, pressing <kbd>50t</kbd> will usually open 50 new tabs, but only 10 if the countlimit is set to 10. This setting limits the number of repeated actions, which you can visualize in the top-right of the Vieb window if <a href="#showcmd">showcmd</a> is set. There is also a setting to limit the maximum recursion of a mapping, named <a href="#maxmapdepth">maxmapdepth</a>.
        <h3 id="darkreader">darkreader</h3>
        Toggle to enable/disable <a href="https://darkreader.org/">darkreader</a>. By default, files and special pages such as the help are not affected, as they are dark already, but you can control which pages are affected with <a href="#darkreaderscope">darkreaderscope</a>. Toggling darkreader with pages open will toggle dark mode for all open pages in realtime, no need to reload. You can customize the appearance and operation of darkreader using the config options below.
        <h3 id="darkreaderbg">darkreaderbg</h3>
        Set the default background color of darkreader styled pages. Can be a color name or a hex code.
        <h3 id="darkreaderblocklist">darkreaderblocklist</h3>
        Block specific sites from using darkreader even if enabled, by excluding them with regular expressions. You can add as many patterns as you want, separated by a commas. If any of these patterns match the current url, darkreader will not be enabled for that site. For example, <span class="command-block">:set darkreaderblocklist=github</span> will block darkreader from loading on sites with "github" in the url. Inverse regular expression matching is supported and can be used as a sort of allowlist. For example, <span class="command-block">:set darkreader darkreaderblocklist=^(?!.*github.*)</span> will ONLY load darkreader on sites with "github" in the url somewhere, though it is recommended to use simpler patterns and use it as a blocklist only, as you can block as many sites as you want. If you prefer your pages dark, it's worth checking if you have set the <a href="#nativetheme">nativetheme</a> setting to the correct theme to match. If you want to use commas in the pattern or would like to use the Array/Object syntax, you can do so like this:
        <div class="command-block">:set darkreaderblocklist=["github", "youtube"]</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="darkreaderbrightness">darkreaderbrightness</h3>
        Set the brightness of darkreader styled pages. A brightness percentage of over 100 is supported, but can give unexpected results.
        <h3 id="darkreadercontrast">darkreadercontrast</h3>
        Set the contrast of darkreader styled pages. A contrast percentage of over 100 is supported, but can give unexpected results.
        <h3 id="darkreaderfg">darkreaderfg</h3>
        Set the default foreground color of darkreader styled pages. Can be a color name or a hex code.
        <h3 id="darkreadergrayscale">darkreadergrayscale</h3>
        Set the grayscale value of darkreader styled pages. 100% grayscale means that all content (not images) will be completely drained of color, while 0% means the grayscale filter is not applied. Any value between will "gray" the look of the elements on the page.
        <h3 id="darkreadermode">darkreadermode</h3>
        Set the mode value of darkreader styled paged. You can choose between light and dark mode, with dark being the default. Switching this to light does the same as selecting the light scheme in the darkreader extension.
        <h3 id="darkreaderscope">darkreaderscope</h3>
        Controls which pages are affected if you enable darkreader. By default, only external sites will use darkreader if you enable it, using "page" in the list. If you want to have darkreader on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means darkreader will trigger on all pages you visit (if enabled at all with <a href="#darkreader">darkreader</a>).
        <h3 id="darkreadersepia">darkreadersepia</h3>
        Set the sepia value of darkreader styled pages. 100% sepia means that all content (not images) will be rendered in the typical brown sepia color. Low percentages are recommended, but you can use any percentage between 0 and 100.
        <h3 id="darkreadertextstroke">darkreadertextstroke</h3>
        Set the width of text stroking of darkreader styled pages. The width can be any value between 0 and 1, and represents the stroke width that will be applied to text on the page, as to make it more readable on a dark background.
        <h3 id="devtoolsposition">devtoolsposition</h3>
        This setting controls the default location where the devtools will open when using the <a href="#:devtools">:devtools</a> command.
        <h3 id="dialogalert">dialogalert</h3>
        With this setting you can control what should happen when pages try to use alerts. Alerts are dialogs that want to give information to you via a popup. By default, they are blocked but only notify you of alerts. You can "show" or "block" the dialog and choose to show a notification with "notify", or any combination of that. Since alerts do not request additional information like confirm and prompt dialogs do, there is little reason to show alerts instead of replacing them with just a notification.
        <h3 id="dialogconfirm">dialogconfirm</h3>
        With this setting you can control what should happen when pages try to use confirms. Confirms are dialogs that ask for confirmation via a popup, either "OK" or "Cancel". By default, they are blocked but only notify you of confirms. You can "show", "block", "allow" the dialog and choose to show a notification with "notify", or any combination of that. If shown, you can choose between "OK" or "Cancel". If blocked, the confirm responds with "false", as if you cancelled the dialog via "Escape" or the "Cancel" button automatically. If allowed, the confirm responds with "true", as if you accepted the dialog via "Enter" or the "OK" button automatically.
        <h3 id="dialogprompt">dialogprompt</h3>
        With this setting you can control what should happen when pages try to use prompts. Prompts are dialogs that ask for user text input via a popup. By default, they are blocked but only notify you of prompts. You can "show" or "block" the dialog and choose to show a notification with "notify", or any combination of that. If shown, you can enter text and send it to the page with "Enter" or cancel it with "Escape". If blocked, the prompt responds with "null", as if you cancelled the dialog via "Escape".
        <h3 id="downloadmethod">downloadmethod</h3>
        The downloadmethod setting can be used to change the behavior of newly requested downloads. By default, new downloads are automatically saved to the <a href="#downloadpath">downloadpath</a>. By changing this setting to "confirm", a dialog will be shown for each new download to request user confirmation before starting. The "ask" method will ask the location for every new download and does not use the "downloadpath" setting. Finally, you may block all incoming downloads with the "block" option. This setting will also change the behavior of <a href="#action.downloadLink">action.downloadLink</a>, <a href="#pointer.downloadLink">pointer.downloadLink</a> (among others) and the download actions in the <a href="#menu">menu</a>, except for "block", which will allow user invoked actions to work as if set to "automatic", though you can unmap the actions to disable this.
        <h3 id="downloadpath">downloadpath</h3>
        The location of all downloaded files. Used as the default folder for all types of downloads, such as files, <a href="#:write">:write</a> command invocations and <a href="#link-related">link-related actions</a>. By default, this setting is empty, and will use a "Downloads" folder inside the user folder (or XDG_DOWNLOAD_DIR/xdg-user-dirs, which takes priority over the default empty value, but not over custom values of the downloadpath). You can set the downloadpath to any directory on your system. To use a different location each time, or to block downloads completely, see the <a href="#downloadmethod">downloadmethod</a> setting.
        <h3 id="encodeurlcopy">encodeurlcopy</h3>
        With this setting you can control what happens in terms of encoding to any url you want to copy from within Vieb. Possible values for this setting are: "spacesonly", to keep the url as is, but replaces spaces with "%20", "encode" to completely re-encode the url and percent encode as much as possible, "keep" to keep the url as is with no changes at all, "decode" to remove any encoding from the url before copying, which will result in nice looking urls, but they might have spaces, so finally there is "nospaces", which decodes the url to a nice looking one, and then replaces spaces with "%20". This is the recommended value to use, but you are free to use any of the url encoding/decoding options listed here.
        <h3 id="encodeurlext">encodeurlext</h3>
        Using this setting you can control how urls that will be opened externally will be encoded. See <a href="#encodeurlcopy">encodeurlcopy</a> for an explanation on the different values. Urls passed to external applications are always wrapped in double quotes, regardless of the chosen encoding method. You can configure which program/command will receive the url using <a href="#externalcommand">externalcommand</a>.
        <h3 id="explorehist">explorehist</h3>
        This setting can be used to control which navigations made using <a class="explore" href="#explore">explore mode</a> should be available from the history when using <a href="#action.exploreHistoryPrevious">action.exploreHistoryPrevious</a> and <a href="#action.exploreHistoryNext">action.exploreHistoryNext</a>. By default the history of navigations is stored and also saved to disk for subsequent session, but this can be changed with this setting. Navigations will be stored in the history depending on the state of this setting at the time of navigation. When set to "persist", the navigations are appended to "explorehist" inside the current <a href="#datafolder">datafolder</a> and kept in memory. When set to "session", the navigation is only appended to the navigation list in memory, and not written to disk. When set to "none", no new navigation history will be saved, though history previously written to memory and/or disk will be kept. It's always safe to delete the "explorehist" file, as Vieb only reads it at startup and only appends it when navigating using "persist".
        <h3 id="externalcommand">externalcommand</h3>
        This setting is used to specify an external command that can be executed with the highlighted url as an argument. The url that is opened with the configured command is the one highlighted when in <a class="pointer" href="#pointer">pointer mode</a> or <a class="visual" href="#visual">visual mode</a> when <a href="#pointer.externalLink">p.externalLink</a> is called, or the current url when calling <a href="#action.openLinkExternal">action.openLinkExternal</a>, though there are more external open actions in <a class="pointer" href="#pointer">pointer mode</a>, see <a href="#link-related">link-related</a> actions. When using the keyboard to do so, you can add multiple mappings that first set this option and then call the action. For example, to make <kbd>&lt;C-v&gt;</kbd> open the link with VLC from <a class="pointer" href="#pointer">pointer mode</a>:
        <div class="command-block">:pmap &lt;C-v&gt; &lt;:set externalcommand=vlc&gt;&lt;p.externalLink&gt;</div>
        By default this setting is empty, so it's up to you to set it before calling the action to make this work. Though if you always want to use the same external command, you could just set it once (either via <a href="#:set">:set</a> or the <a href="#viebrc">viebrc</a>) and call the action without adding a custom mapping. You can also right-click on links on the page and call this command with the menu option. You can control error or success reporting with the <a href="#notificationforsystemcommands">notificationforsystemcommands</a> setting, which by default only shows failures. You can change the url encoding of the urls to be opened with the command with <a href="#encodeurlext">encodeurlext</a>, the url is always wrapped in double quotes. You can change the default shell that the command will run in with the <a href="#shell">shell</a> setting. PDFs can be automatically opened externally on visit by setting <a href="#pdfbehavior">pdfbehavior</a> to "external" instead of "download".
        <h3 id="favicons">favicons</h3>
        Change this setting to modify the favicon cache duration. This setting does not affect for how long favicons are stored on disk, but only affects the amount of time it takes to refresh them. A favicon will automatically be removed from disk when it is not used for any of the pages in the browsing history. This setting does not change this mechanism, and only modifies the length of time any favicon will be cached. If you want to minimize the amount of requests for favicons but still have them, you could consider to never expire the favicon cache. If favicons are disabled, you won't see them in other places of Vieb either and no requests will be made to fetch favicons. While disabled, you will still see favicons for built-in pages and an empty one for others in the tabbar, which you can choose to hide by adding "#tabs .favicon {display: none;}" to a <a href="#:colorscheme">:colorscheme</a>.
        <h3 id="favoritepages">favoritepages</h3>
        This setting can be used to add any number of favorite pages to the new tab page. You only need to specify the url of the page, other info will be stored automatically when you visit the site. The url needs to match exactly, although they will be prefixed with "https://" if no protocol is specified. Favorite pages will appear next to the top sites. If you only want to show favorites, without the most visited sites, set <a href="#suggesttopsites">suggesttopsites</a> to 0. When both settings are empty/disabled, the new tab page will be empty instead. The favoritepages setting is unused if you set a custom new tab page with <a href="#newtaburl">newtaburl</a>. If you want to use commas in the pattern or would like to use the Array/Object syntax, you can do so like this:
        <div class="command-block">:set favoritepages=["github.com", "youtube.com"]</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="followchars">followchars</h3>
        With this setting you can control which characters should be used to select elements when inside <a class="follow" href="#follow">follow mode</a>. By default, it will use only letters, but you can select a few other predefined sets of characters with this setting, or supply your own set like so:
        <span class="command-block">:set followchars=custom:asdf</span>
        After running this, only the letters "a", "s", "d" and "f" will now be used for labelling elements. This can be useful, if you want to make custom <a href="#mappings">mappings</a> in <a class="follow" href="#follow">follow mode</a>, as mappings take priority over selecting elements on the page using the followchars setting. The <a href="#followfallbackaction">followfallbackaction</a> controls what happens when you press a key in <a class="follow" href="#follow">follow mode</a> that does not have a mapping and also does not appear in the followchars setting, by default it will filter the elements. The sets you can choose from for this setting are: "all", "alpha", "alphanum", "dvorakhome", "numbers" and "qwertyhome", but you can always use a custom set of characters.
        <h3 id="followelement">followelement</h3>
        This setting can be used to filter the types of elements that will be highlighted when using the <a class="follow" href="#action.startFollowCurrentTab">regular follow mode</a>. Different sets of elements can be selected at any moment to be highlighted. For example, with this setting set on "inputs-click,inputs-insert", only input elements will be highlighted in follow mode. Please check <a class="follow" href="#follow">follow mode</a> for more information about the types of elements.
        <h3 id="followelementpointer">followelementpointer</h3>
        This setting can be used to filter the types of elements that will be highlighted when using <a class="follow" href="#follow">follow mode</a> to move the cursor in <a class="pointer" href="#pointer">pointer mode</a>. For example, with this setting set on "inputs-click,inputs-insert", only input elements will be highlighted in <a class="follow" href="#follow">follow mode</a>. Please check <a class="follow" href="#follow">follow mode</a> for more information about the types of elements.
        <h3 id="followfallbackaction">followfallbackaction</h3>
        With this setting you can decide what happens when you press characters in <a class="follow" href="#follow">follow mode</a> that don't have a mapping and are also not part of the <a href="#followchars">followchars</a> used to select the elements. By default, these other characters will be used to type out a search in the navbar, which will filter elements based on the url, text and src properties. This setting works best when you use the "numbers" set for followchars, as otherwise it might be confusing which character does what. If you don't want this filtering behavior at all, you can instead choose to make these other characters end follow mode by changing this setting to "exit", or ignore the keys altogether (as they don't have a mapping anyway) by using "nothing".
        <h3 id="followlabelposition">followlabelposition</h3>
        Using the label position setting you can control where <a class="follow" href="#follow">follow mode</a> character labels should be aligned. Since this cannot be easily set with CSS, this setting has a fair amount of potential locations you can choose from. The first main consideration is if you want the labels to be inside the border, outside of it, or floating on a corner. From there you can choose which side of the border they should align primarily to, and finally where on that border side they should actually appear. For example, the default is "outsiderighttop", meaning it's a label on the outside, on the right border, at the top of the right border. You can by default also rotate between available options with "`", but keep in mind that there are a lot. Most other Vim-like browsers have a different alignment compared to Vieb's default.
        <h3 id="follownewtabswitch">follownewtabswitch</h3>
        This setting can be used to automatically switch to newly opened tabs when using the <a class="follow" href="#action.startFollowNewTab">new tab version of follow mode</a>. When enabled, you will automatically switch to the new tab, unless you hold Shift while typing out the relevant keys. If you disable this toggle you won't switch to the tabs automatically, even when not holding Shift to stay in <a class="follow" href="#follow">follow mode</a>. This setting does not affect the <a class="follow" href="#action.startFollowNewSplit">split version of follow mode</a>, as you will always switch to new splits.
        <h3 id="guifontsize">guifontsize</h3>
        Change the font size for the entire Vieb interface. Changing the font size setting will also scale the navbar, <a href="#specialpages">special pages</a> such as this help page, notifications and <a class="follow" href="#follow">follow mode</a> indicators. It will not automatically zoom websites, which can be done with <a href="#action.zoomIn">action.zoomIn</a> and related actions.
        <h3 id="guifullscreennavbar">guifullscreennavbar</h3>
        This setting controls the visibility of the navbar while inside fullscreen. For the visibility outside of fullscreen, see <a href="#guinavbar">guinavbar</a>. The different options are also explained in more detail there. You can toggle the fullscreen state with <a href="#action.toggleFullscreen">action.toggleFullscreen</a>.
        <h3 id="guifullscreentabbar">guifullscreentabbar</h3>
        This setting controls the visibility of the tabbar while inside fullscreen. For the visibility outside of fullscreen, see <a href="#guitabbar">guitabbar</a>. The different options are also explained in more detail there. You can toggle the fullscreen state with <a href="#action.toggleFullscreen">action.toggleFullscreen</a>. If you are hiding the tabbar, it might be useful to also show the "line" <a href="#loadingindicator">loadingindicator</a>.
        <h3 id="guihidetimeout">guihidetimeout</h3>
        The guihidetimeout setting is used to configure the duration of temporarily showing gui elements that are configured to do so. For example, with this setting configured as 2000 and <a href="#guitabbar">guitabbar</a> set to "onupdate", the tabbar will be shown for 2 seconds every time a tab is added, removed or updated. This guihidetimeout setting also applies to <a href="#guinavbar">guinavbar</a> when it is set to "onupdate". This setting is used exactly the same way for the fullscreen variants: <a href="#guifullscreennavbar">guifullscreennavbar</a> and <a href="#guifullscreentabbar">guifullscreentabbar</a>. A value of 0 will disable the timeout, and never hide the elements again after a delay even if configured to do so by their specific gui setting.
        <h3 id="guinavbar">guinavbar</h3>
        This setting controls the visibility of the navbar outside fullscreen. When set to "always", the navbar is shown at all times. To automatically hide the navbar when there is nothing happening, set this setting to "onupdate", which temporarily shows the navbar when the mode changes or when you are typing in the navbar. The duration of showing it temporarily is configured by <a href="#guihidetimeout">guihidetimeout</a>. To only show the navbar for typing and not for mode updates, set it to "oninput". It can also be set to "never", which will completely hide the navbar, even when typing. The visibility of the navbar does not affect its usage or mappings.
        <h3 id="guiscrollbar">guiscrollbar</h3>
        With this setting you can control when the scrollbar should appear on pages. You can also permanently hide and show it using custom <a href="#userstyle">userstyle</a> CSS rules, but with this setting you can do so without having to use or even enable userstyle and you can also do it event based. By default the scrollbar is always shown, but you can choose to never show it. You can also choose to only show the scrollbar on scroll with "onscroll", or on any mouse movement (also scrolling) with "onmove". The duration it's shown after an event is controlled with <a href="#guihidetimeout">guihidetimeout</a>.
        <h3 id="guitabbar">guitabbar</h3>
        This setting controls the visibility of the tabbar outside fullscreen. When set to "always", the tabs are always shown. To automatically hide the tabbar when there are no tabs being added or changed, set it to "onupdate". The duration of showing it temporarily is configured by <a href="#guihidetimeout">guihidetimeout</a>. To never show the tabs even when updating them, set this setting to "never". When set to "never" it is recommended to use the <a href="#:buffer">:buffer</a> command to switch between the open websites. The visibility of the tabbar does not affect its usage or mappings. If you are hiding the tabbar, it might be useful to also show the "line" <a href="#loadingindicator">loadingindicator</a>.
        <h3 id="historyperpage">historyperpage</h3>
        Control the amount of history entries each page on the <a href="#:history">history page</a> should show. To get all the history on a single page set this to the maximum value. You can also change the amount displayed per page temporarily while on the history page, but that value is not kept after reloads, while this setting is. The default value of 100 was carefully chosen to make rendering fast while at the same time not showing too many entries at once. If you have a lot of history, lower values might slow down initial loading, while higher values might make the page slower after it's loaded.
        <h3 id="ignorecase">ignorecase</h3>
        Toggle for case-sensitive searching in the page. Any existing search will be updated to match this setting when either <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a> are called. This setting is ignored by default, unless <a href="#smartcase">smartcase</a> is disabled.
        <h3 id="incsearch">incsearch</h3>
        Toggles incremental search in the <a class="search" href="#search">search mode</a>. When enabled, the search will be updated every time a character is typed, without having to start the search with <a href="#action.useEnteredData">action.useEnteredData</a>. You can control if these type of searches should highlight other pages or not with <a href="#searchreachinc">searchreachinc</a>.
        <h3 id="inputfocusalignment">inputfocusalignment</h3>
        With this setting you can choose where the cursor should appear after focussing an input field with <a class="follow" href="#follow">follow mode</a>. By default, it will position the cursor at the end of the input field, and then remember the position for each subsequent interaction with it, even after leaving insert mode and going back to it. You can also choose to do the same for the start of the input field with "rememberstart" instead of "rememberend". If you always want to jump the cursor to the start or end without remembering it on subsequent focus, you can use "alwaysstart" or "alwaysend" to always set the cursor to the start or the end of the input field respectively.
        <h3 id="insertleavetimeout">insertleavetimeout</h3>
        This setting controls if and for how long <a class="insert" href="#insert">insert mode</a> should remain active when there are no keyboard or mouse inputs registered for a while. By default <a class="insert" href="#insert">insert mode</a> will remain active indefinitely, basically until you manually switch to another mode. The timeout is in milliseconds of inactivity after which it should automatically switch back to <a class="normal" href="#normal">normal mode</a>. Any keyboard or mouse interaction will reset the timeout and thus give you more time to type. The timeout is also reset when entering or leaving <a class="insert" href="#insert">insert mode</a>.
        <h3 id="keeprecentlyclosed">keeprecentlyclosed</h3>
        Toggle whether to keep recently closed tabs and allow them to be restored. This setting is unaffected by other history settings. Disabling this setting will result in the <a href="#action.reopenTab">action.reopenTab</a> being unable to restore previously closed tabs. If <a href="#restoretabs">restoretabs</a> is disabled, all open tabs will be moved to the list of recently closed tabs when quitting Vieb, unless this setting is also disabled (in which case they can not be restored).
        <h3 id="lang">lang</h3>
        Change the interface language of Vieb. It affects the entire interface, such as notifications and context menus. The help page, commands and mode names are not translated, though the help page might be in the future. Previously shown notifications are not translated when changing this setting and special pages need to be refreshed before using the new language, but context menus and new notifications will use the new language right away.
        <h3 id="loadingindicator">loadingindicator</h3>
        Using this setting you can control where the page should show that it is still loading. By default, this is only done with a spinner in the tabbar. There is also a progress line that can be used with "line", which is recommended if you hide the tabbar with <a href="#guitabbar">guitabbar</a> for example. Finally you can choose to show no loading indicator at all with "none" or use both by setting "all", meaning both a spinner and the line. The line is only shown if the current tab is loading and is not affected by <a href="#splitting">splitting</a>.
        <h3 id="mapsuggest">mapsuggest</h3>
        With this setting you can control the amount of suggestions to show for multi-key mappings. It is independent from the <a href="#showcmd">showcmd</a> setting, which controls if the pressed keys should be shown. The suggestions are colored based on which keys are already pressed, which still need to be pressed and what will happen when that particular mapping is triggered. With this setting, you can configure to show as few or many suggestions for these kind of multi-key mappings as you want to. If set to zero, this feature will be disabled completely. The suggestions will only be shown for as long as there are pressed keys, for which the timeout can be set with <a href="#timeout">timeout</a> and <a href="#timeoutlen">timeoutlen</a>. If you want to have more time to read the suggestions, it's recommended to increase the timeoutlen or even disable the timeout. Finally, you can control the position of the suggestions using <a href="#mapsuggestposition">mapsuggestposition</a>.
        <h3 id="mapsuggestposition">mapsuggestposition</h3>
        This setting controls the position of the suggestions for multi-key mappings. By default they are shown on the topright, which means they are close to the <a href="#showcmd">showcmd</a> location. You can control the number of suggestions (or disable them) using <a href="#mapsuggest">mapsuggest</a>. It is recommended to choose a location that is not identical to <a href="#notificationposition">notificationposition</a>, but this is not enforced.
        <h3 id="markposition">markposition</h3>
        With this setting you can control where stored marks will be restored to using <a href="#action.restoreMark">action.restoreMark</a> and <a href="#:restoremark">:restoremark</a>. Marks stored with <a href="#action.makeMark">action.makeMark</a> will store the current page url based on the last pressed key, so they can be restored to a wide range of different location in Vieb. By default, they restore to a "newtab", but you can also choose the current tab with "open", or any of the other special locations with the other values for this setting. Finally, the "search" setting will set the url as the current search string with <a class="search" href="#search">search mode</a>.
        <h3 id="markpositionshifted">markpositionshifted</h3>
        With this setting you can optionally override the <a href="#markposition">markposition</a> setting for shifted keys. By default, they will open to the same location as unshifted ones, but this setting can change that. For example if you want regular keys to be opened in the current tab and shifted keys in a new tab, use <span class="command-block">:set markposition=open markpositionshifted=newtab</span>.
        <h3 id="maxmapdepth">maxmapdepth</h3>
        The maximum amount of recursion for recursive <a href="#mappings">mappings</a>. After reaching this limit, all subsequent actions will be cancelled as part of the mapping.
        <h3 id="menupage">menupage</h3>
        With this setting you can decide when Vieb's mouse menu should appear on pages when right-clicking. When set to "globalasneeded", it will appear only if the website does not already provide one using a global listener or an element listener. If set to "elementasneeded", the menu will appear if the website does not provide one using an element listener, so if there are global listeners that maybe open the menu, Vieb's menu will still appear. If set to "never", the mouse menu of Vieb will never appear, but the website might provide one. If set to "always", it will appear even when the website already seems to have one, which might result in two menus being opened. You can always open the menu using <a href="#action.menuOpen">action.menuOpen</a>, or with the <a href="#mouse">mouse</a> if "menupage" is enabled as a mouse feature.
        <h3 id="menusuggest">menusuggest</h3>
        With this setting you can control if suggestions should have an options menu when right-clicking. When set to "both", you will be allowed to open a menu in <a class="explore" href="#explore">explore mode</a> and in <a class="command" href="#command">command mode</a>. You can also enable it just for one of these modes, or disable it entirely using the "never" value. You can always open the menu using <a href="#action.menuOpen">action.menuOpen</a> if a suggestion is selected, or with the <a href="#mouse">mouse</a> if "menusuggest" is enabled as a mouse feature.
        <h3 id="menuvieb">menuvieb</h3>
        With this setting you can control which mouse menus should be enabled for the Vieb interface when right-clicking. You have the choice of either enabling the menu for tabs or for the navbar. You can also choose to enabling both or neither. Just as clicking on the navbar outside of any navbar related modes will bring you to <a class="explore" href="#explore">explore mode</a> (if "toexplore" is enabled as a <a href="#mouse">mouse</a> feature), right-clicking the navbar will do the same and open the navbar menu if enabled by this setting. This setting does not control the webpage menu, see the <a href="#menupage">menupage</a> setting, or for the suggestions menu, see the <a href="#menusuggest">menusuggest</a> setting. You can always open the menu using <a href="#action.menuOpen">action.menuOpen</a>, or with the <a href="#mouse">mouse</a> if "menuvieb" is enabled as a mouse feature.
        <h3 id="mintabwidth">mintabwidth</h3>
        The minimum amount of pixels for a tab to be in the navbar. When there are too many tabs to fit with this minimum width, it will overflow according to the value of the <a href="#taboverflow">taboverflow</a> setting. If the minimum tab width is set to 0, the taboverflow setting is not used, as tabs will never overflow. When set to a really high value, only one tab will be visible at a time, making the <A href="#:buffer">:buffer</a> command even more useful.
        <h3 id="modifiers">modifiers</h3>
        This setting controls which keys will not be registered on their own when pressed, but only when used as a modifier. Modifier keys such as Ctrl, Meta, Alt and Shift will still be usable to modify other keys, but they won't be individually detected as being pressed if they are part of this list. For example, a mapping like "S&lt;C-w&gt;" requires you press "s" with shift and then w while holding Ctrl. In this case, you probably don't want to register Ctrl as a key when trying to press w while holding Ctrl, which would empty the pressed keys list of "S" back to "" because you pressed Ctrl. The other modifiers are included for similar reasons. The lock keys are by default included to allow them to be used as if they were modifiers if they are remapped as such in your operating system (a common remapping is CapsLock to Ctrl).
        <h3 id="mouse">mouse</h3>
        The mouse setting influences if, when and how the Vieb interface should react to mouse actions. By default, it is set to a list of all features, which means every mouse feature of Vieb is enabled. The mouse setting is a list setting which can be used to enable any feature you want to from this list:
        <ul>
            <li><span class="command-block">pageininsert</span> - Interact with the webpage while inside <a class="insert" href="#insert">insert mode</a>, while it can be disabled, it might prevent specific pages from getting the mouse focus they need to keep hover menus open.</li>
            <li><span class="command-block">pageoutsideinsert</span> - Interact with the webpage, even outside of <a class="insert" href="#insert">insert mode</a>. You might need to update the page after adding this feature for it to take effect. This also controls if mouse scrolling works, even if you are currently hovering <a class="follow" href="#follow">follow mode</a> links or such.</li>
            <li><span class="command-block">switchtab</span> - Click on tabs to switch to them, optionally even by hovering them if <a href="#mousefocus">mousefocus</a> is enabled.</li>
            <li><span class="command-block">history</span> - Use the previous and forward keys of your mouse to interact with the page history, similar to <a href="#action.backInHistory">action.backInHistory</a> and <a href="#action.forwardInHistory">action.forwardInHistory</a>.</li>
            <li><span class="command-block">guiontop</span> - Bring back the GUI elements when moving to the top of the page regardless of <a href="#guitabbar">guitabbar</a> and <a href="#guinavbar">guinavbar</a>.</li>
            <li><span class="command-block">newtab</span> - Open a new tab by double clicking on the tab bar, also works when double clicking on an existing tab. The new tab will open at the position relative to the double clicked tab depending on how <a href="#tabnewposition">tabnewposition</a> is configured.</li>
            <li><span class="command-block">closetab</span> - Middle click on a tab to close it.</li>
            <li><span class="command-block">menupage</span> - Allow right-click to open the page context menu, see <a href="#menupage">menupage</a> for details.</li>
            <li><span class="command-block">menusuggest</span> - Allow right-click to open the suggestions context menu, see <a href="#menupage">menusuggest</a> for details.</li>
            <li><span class="command-block">menuvieb</span> - Allow right-click to open Vieb menus, see <a href="#menuvieb">menuvieb</a> for details.</li>
            <li><span class="command-block">modeselector</span> - Switch modes by using the mode dropdown when hovering over the current mode in the navbar. If not present, the selector will not appear on hover.</li>
            <li><span class="command-block">movepointer</span> - Move the pointer by clicking on the page while inside <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a>.</li>
            <li><span class="command-block">notification</span> - Allow clicking on the notification to execute actions, currently only does something for completed downloads.</li>
            <li><span class="command-block">follow</span> - Clicking on <a class="follow" href="#follow">follow mode</a> elements to execute a click or open them. Middle mouse will open links in new tabs, and click on regular elements while remaining in <a class="follow" href="#follow">follow mode</a>. Other mouse buttons will also remain in this mode until you click using the left mouse button, or another action makes you leave the mode.</li>
            <li><span class="command-block">toinsert</span> - Switch to <a class="insert" href="#insert">insert mode</a> by clicking/selecting text in an input field on the page.</li>
            <li><span class="command-block">toexplore</span> - Switch to <a class="explore" href="#explore">explore mode</a> by clicking on the url input in the navbar, if currently not typing there yet.</li>
            <li><span class="command-block">url</span> - Allow interaction with the url input box when inside <a class="explore" href="#explore">explore mode</a>, <a class="command" href="#command">command mode</a> or <a class="search" href="#search">search mode</a>. Also influences if you can use the mouse when filtering <a class="follow" href="#follow">follow mode</a> links.</li>
            <li><span class="command-block">leaveinput</span> - Switch back to normal mode when clicking outside of the url bar while in <a class="explore" href="#explore">explore mode</a>, <a class="search" href="#search">search mode</a> or <a class="command" href="#command">command mode</a>.</li>
            <li><span class="command-block">leaveinsert</span> - Switch back to normal mode when clicking outside of the page while in <a class="insert" href="#insert">insert mode</a>.</li>
            <li><span class="command-block">suggestselect</span> - Select suggestions using the mouse while in <a class="explore" href="#explore">explore mode</a> or <a class="command" href="#command">command mode</a>.</li>
            <li><span class="command-block">scrollsuggest</span> - Scroll through the suggestions if they exceed the window size.</li>
            <li><span class="command-block">scrollzoom</span> - Adjust the page zooming by scrolling while holding Control.</li>
            <li><span class="command-block">scrolltabs</span> - Scroll through the tabbar if configured to overflow with <a href="#taboverflow">taboverflow</a>.</li>
            <li><span class="command-block">screenshotframe</span> - Move/resize the screenshot region by dragging it, while typing out the <a href="#:screencopy">:screencopy</a> or <a href="#:screenshot">:screenshot</a> command with a region.</li>
        </ul>
        You can simply set the mouse setting to a list of all the features you want, for example: <span class="command-block nowrap">:set mouse=scrollzoom,oustsideinsert,newtab</span>. Because the mouse setting is list, you can add or remove specific features with <span class="command-block">:set+=feature</span> and <span class="command-block">:set-=feature</span>, which will even work when the current value is "all". When this setting is empty, you will not be able to use the mouse at all and you will lose all the features listed in the bullet list above. Using <a href="#pointer.moveToMouse">pointer.moveToMouse</a> to start <a class="pointer" href="#pointer">pointer mode</a> at the mouse cursor location is not affected by any mouse feature. The same is true for <a href="#mousevisualmode">mousevisualmode</a> and <a href="#mousefocus">mousefocus</a>.</li>
        <h3 id="mousedisabledbehavior">mousedisabledbehavior</h3>
        This setting controls what should happen when <a href="#mouse">mouse</a> features are disabled for a specific element and you click on it. By default, the click will be ignored, but you can choose to make elements without regular mouse features enabled to be an additional drag region, similar to the logo. Depending on what region of the app, it requires you to disable different mouse features to make it a drag region automatically. If you change this setting to "drag" instead of "nothing" and you have disabled all mouse features, the entire app becomes a drag region, similar to very old Vieb releases. Context menu mouse features do not need to be disabled specifically, but they will not be usable with the mouse if that region has become a drag region. The following mouse features will need to be disabled along with having this setting set to "drag" if you want to use them as a drag region:
        <ul>
            <li>Logo - The logo is always a drag region, even with this setting set to "nothing".</li>
            <li>Mode selector - For this region to become draggable, you only need to disable the <span class="command-block">modeselector</span> feature, as it's the only mouse feature of the mode selector.</li>
            <li>Url input box - For this region there are two mouse features that need to be disabled: <span class="command-block">toexplore</span> and <span class="command-block">url</span>. If you disable just <span class="command-block">toexplore</span>, the box will already be draggable when not editing the url, such as in <a class="normal" href="#normal">normal mode</a>. Both need to be disabled for it to be be draggable in all modes. The <a href="#menuvieb">menuvieb</a> setting does not need to be disabled, nor does the respective mouse feature need to be, though you will not be able to use it with the mouse if it's a drag region. The suggestions are separately disabled with <span class="command-block">suggestselect</span>.</li>
            <li>Tabs - The entire tab region will become a drag region with these mouse features disabled: <span class="command-block">switchtab</span>, <span class="command-block">newtab</span>, <span class="command-block">closetab</span>, <span class="command-block">scrolltabs</span>. The <a href="#menuvieb">menuvieb</a> setting does not need to be disabled, nor does the respective mouse feature need to be, though you will not be able to use it with the mouse if it's a drag region. The <a href="#mousefocus">mousefocus</a> setting will not switch tabs if it's become a drag region, even though it would still do so when this behavior setting were set to "nothing". The <a href="#mousefocus">mousefocus</a> feature can still be used by hovering over the pages if those have not become a drag region too.</li>
            <li>Pages - The entire page will become a drag region inside <a class="insert" href="#insert">insert mode</a> if <span class="command-block">pageininsert</span> is disabled. The entire page will become a drag region outside <a class="insert" href="#insert">insert mode</a> if <span class="command-block">pageoutsideinsert</span> is disabled. The <a href="#menupage">menupage</a> setting does not need to be disabled, nor does the respective mouse feature need to be, though you will not be able to use it with the mouse if it's a drag region. The <a href="#mousefocus">mousefocus</a> setting will not switch tabs if it's become a drag region, even though it would still do so when this behavior setting were set to "nothing". The <a href="#mousefocus">mousefocus</a> feature can still be used by hovering over the tabs if those have not become a drag region too.</li>
        </ul>
        For other less obvious regions, such as incoming notifications or follow elements, the same system is in place, but they only require a single mouse feature to be disabled. If you want to use different breakpoints for toggling drag regions, do note that it's just one line of CSS that you can add to any element via <a href="#:colorscheme">colorschemes</a> which is <span class="command-block">.selector {-webkit-app-region: drag;}</span>. You can thus also choose not to make use of this setting by leaving it set to "nothing" and defining your own regions that should always be draggable. To undo a drag region use "no-drag" as the value in CSS.
        <h3 id="mousefocus">mousefocus</h3>
        With the mousefocus toggle it's possible to focus a tab by hovering it with the mouse. When mousefocus is enabled, you can switch between tabs by hovering over a tab in the tabbar, without clicking it. In case of multiple splits you can also switch by hovering the page, though that does require "pageininsert" and/or "pageoutsideinsert" to be enabled as a <a href="#mouse">mouse</a> feature.
        <h3 id="mousenewtabswitch">mousenewtabswitch</h3>
        This setting can be used to automatically switch to newly opened tabs when using the mouse. This behavior is on by default. This toggle only affects using the mouse to do so. In the <a class="follow" href="#action.startFollowNewTab">new tab version of follow mode</a> you will automatically switch to the new tab, unless you hold Shift while typing out the relevant keys or if you disabled <a href="#follownewtabswitch">follownewtabswitch</a>.
        <h3 id="mousevisualmode">mousevisualmode</h3>
        With this setting you can control how text selections made with the mouse should affect <a class="visual" href="#visual">visual mode</a>. By default, you will not switch to <a class="visual" href="#visual">visual mode</a>, but the selection will be stored so that when you do enter <a class="visual" href="#visual">visual mode</a>, the mouse selection will be applied as if it were made using <a class="visual" href="#visual">visual mode</a>. If you want to disable this, set this setting to "never". If you want to immediately switch to <a class="visual" href="#visual">visual mode</a> when you select something with the mouse and apply the selection, you can set this to "activate". Though do keep in mind that selecting text with the <a href="#mouse">mouse</a> might have slightly different results compared to selection with <a class="visual" href="#visual">visual mode</a>, especially when selecting text in input fields or on empty sections of the page. You can only interact with the page (including text selection) if you have enabled "pageininsert" and/or "pageoutsideinsert" as a <a href="#mouse">mouse</a> feature.
        <h3 id="nativenotification">nativenotification</h3>
        Setting for controlling when to use native/system notifications instead of the Vieb notifications. The notification history can still be viewed on the <a href="#:notifications">notifications</a> page, regardless of this setting. When this setting is set to always", you will not get a scrollable popup for large notifications, as all notifications will be unconditionally passed to your operating system to handle. If set to "smallonly", Vieb will show large notifications with the scrollable popup, and small ones will be passed to the native system. If set to "largeonly", Vieb will pass large notifications to the native system, and small ones are shown with Vieb's internal notification system. The "never" value means that native notifications are not used and Vieb will show all notifications using its own system. You can control how many newlines are considered small/large using <a href="#notificationlimitsmall">notificationlimitsmall</a>.
        <h3 id="nativetheme">nativetheme</h3>
        <p>DEPRECATION: This setting will change the default value in 13.0.0 from "dark" to "system".</p>
        With this setting you can control the theme that should be reported to websites that is used by your system. It can either be set to "system" or "light", but by default it will simply use the "dark" preference for it. This theme is not directly used by Vieb, you can use <a href="#:colorscheme">:colorscheme</a> for that. The nativetheme setting simply controls what theme is reported to websites, so that they can adapt their styling based on <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme">prefers-color-scheme</a>. Updates to this setting immediately take effect, and you don't need to reload. Currently the setting will be interpreted by websites as
        <span class="nativetheme light">Light</span><span class="nativetheme dark">Dark</span>. To change the devtools theme, use the startup option "--devtools-theme" or the ENV variable "VIEB_DEVTOOLS_THEME" instead (see "--help" for details).
        <h3 id="newtaburl">newtaburl</h3>
        Setting to choose a custom page that will be used as the newtab page. By default it's unset so that Vieb's built-in new tab page will be used, which you can customize with a <a href="#:colorscheme">:colorscheme</a>, <a href="#favoritepages">favoritepages</a> or <a href="#suggesttopsites">suggesttopsites</a>. If for some reason you want to use a completely different new tab page, you can use this setting to point to a new location, either as a url or as a file location. Having an empty new tab page can be done with: <span class="command-block">:set favoritepages= newtaburl= suggesttopsites=0</span>
        <h3 id="notificationduration">notificationduration</h3>
        This setting configures the amount of milliseconds a notification should be shown for. A value of 0 will disable notifications and not keep history of them, but any other value will show them and store them on the <a href="#:notifications">notifications</a> page. The value of this setting is ignored when native notifications are used.
        <h3 id="notificationforpermissions">notificationforpermissions</h3>
        With this setting you can enable notifications for permission requests. Even with this setting set to "silent", the permission request can be found in the <a href="#:notifications">notifications</a> page. If you do not want it to be stored at all, you can now set it to "none". Additionally, you can choose to only show notifications for "allowed" or "blocked" permissions. Notifications for permission requests include the website url and type of access that was given. For example, if you configured <a href="#permissioncamera">permissioncamera</a> to always block this permission, a notification will be shown that the camera permission is globally blocked. Other ways to manage permissions are with <a href="#permissionsallowed">permissionsallowed</a>, <a href="#permissionsasked">permissionsasked</a> and <a href="#permissionsblocked">permissionsblocked</a>, all of which are list settings that can automatically allow, ask for or deny permissions based on the current website url using regular expressions. Finally there is a different setting to control if websites are allowed to show notifications named <a href="#permissionnotifications">permissionnotifications</a>.
        <h3 id="notificationforsystemcommands">notificationforsystemcommands</h3>
        This setting controls if you receive notifications for system commands that you run. You can run any system command by prefixing the command with "!", similar to Vim. By default you will only be notified of errors with the command, but you can choose to receive no notifications with "none" or even receive success updates with "all". This setting also applies to <a href="#action.editWithVim">action.editWithVim</a>, which uses <a href="#vimcommand">vimcommand</a>. Finally, the external <a href="#link-related">link related actions</a> are also affected if <a href="#externalcommand">externalcommand</a> has been set.
        <h3 id="notificationlimitsmall">notificationlimitsmall</h3>
        Control the amount of lines in a notification that should be considered a small or a large one. Small notifications are shown over the page in the corner configured with <a href="#notificationposition">notificationposition</a>, while large ones show in a dialog that can be scrolled. The line limit by default is set to 3, so notifications with 3 lines or fewer are shown in the notification corner, while larger ones show in the dialog. If you always want the dialog, set this setting to 0, or if you never want it, set it to a very large limit. You can also choose to use native notifications instead, optionally only for small or large notifications using the <a href="#nativenotification">nativenotification</a> setting.
        <h3 id="notificationposition">notificationposition</h3>
        This setting sets the location of Vieb notifications. You can set it to any corner of the window. Long notifications will open in a scrollable popup similar to Vim. The value of this setting is ignored when native notifications are used.
        <h3 id="passthroughkeys">passthroughkeys</h3>
        With the passthroughkeys setting you can control which keys that are pressed in <a class="normal" href="#normal">normal mode</a> should instead be send to the page as if pressed in <a class="insert" href="#insert">insert mode</a>. The object key is a regular expression that will check for matches with the url, and the value is a list of <a href="#key-codes">key codes</a> (no separator needed). For example, to be able to jump in a video using the arrow keys on Youtube while staying in <a class="normal" href="#normal">normal mode</a>, you could use the following command:
        <div class="command-block">set passthroughkeys={".*youtube\.com.*": "f&lt;Right&gt;&lt;Left&gt;&lt;Space&gt;&lt;NL&gt;"}</div>
        The regex isn't a perfect domain matching one, but you can choose any regex you want to match with the urls. If it matches, those keys can be pressed in <a class="normal" href="#normal">normal mode</a> and be send to the page instead of triggering a Vieb action. The example above also includes the "f" key, which could be troublesome if you would need to use <a class="follow" href="#follow">follow mode</a> on those pages. The passthroughkeys only supports mapping the same keys, so you could instead solve it like so: <span class="command-block">:nmap &lt;c-f&gt; &lt;toInsertMode&gt;f&lt;toNormalMode&gt;</span> This allows you to press Ctrl+f and send a regular f to the underlying page. Unlike passthroughkeys this uses the <a href="#mappings">mapping system</a> to do it, and as such is not filtered by url.
        <h3 id="pdfbehavior">pdfbehavior</h3>
        Control what happens when a PDF is opened in a page. By default, it will now download the PDF url. You can also choose to block the reader without automatically downloading with "block". To get the built-in Chromium PDF reader back, use "view". The reader is disabled because no interaction is possible with it and you also lose focus on the Vieb interface, requiring mouse interaction to get it back. You can also choose to open the PDF externally using the <a href="#externalcommand">externalcommand</a> by setting pdfbehavior to "external". If you want to do either of these but only manually, you can set the pdfbehavior to "block" and use <a href="#action.openLinkExternal">action.openLinkExternal</a> or <a href="#action.downloadLink">action.downloadLink</a> manually, this setting is only for doing either of these automatically.
        <h3 id="permissioncamera">permissioncamera</h3>
        Permission setting to either allow or block websites from using your camera. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. You will most likely also need to allow <a href="#permissionmediadevices">permissionmediadevices</a> to provide the site with a list of available media devices.
        <h3 id="permissioncertificateerror">permissioncertificateerror</h3>
        Permission setting to either allow or block websites with invalid certificates from being visited. When set to "ask", you will get a popup to ask if you want to allow the request. Unlike other permission settings, once you allow a certificate, that specific certificate will be remembered as valid for the same domain until a browser restart. If set to "allow", the behavior will be the same as accepting any invalid certificate by default, which is not recommended when using Vieb to surf the internet (though it could be valid for on-premise locations without internet that only operate locally). The default behavior of Vieb is obviously to block all custom/invalid certificates, which you could also override only for localhost like so: <span class="command-block">:set permissionsallowed=https://localhost(|\/.*|:.*)~certificateerror</span>.
        <h3 id="permissionclipboardread">permissionclipboardread</h3>
        Permission setting to either allow or block websites from reading the clipboard text. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionclipboardwrite">permissionclipboardwrite</h3>
        Permission setting to either allow or block websites from writing the clipboard text. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. On some sites, it's required to also allow reading the clipboard using the <a href="#permissionclipboardread">permissionclipboardread</a> setting before writing is allowed, on other sites just allowing writing itself is enough. So while writing is by default allowed, it might not work on all websites without also allowing reading. Finally, you also need page focus for clipboard actions to work, which it will do by default for <a href="#:runjsinpage">:runjsinpage</a>, <a class="pointer" href="#pointer">pointer mode</a> and <a class="follow" href="#follow">follow mode</a>, but not for <a href="#mouse">mouse</a> clicks due to technical limitations, unless you make sure you are in <a class="insert" href="#insert">insert mode</a> while you click, which will focus the page unconditionally.
        <h3 id="permissionclosepage">permissionclosepage</h3>
        Permission setting to either allow or block websites from closing themselves. Similar to manually closing a tab, but this permission allows the page to close its own tab automatically.
        <h3 id="permissiondisplaycapture">permissiondisplaycapture</h3>
        Permission setting to ask or block websites from using display capture functionality, also known as screensharing. There is no allow value for this option, because each time this is requested you need to choose the sharing source. If set to ask, Vieb will show a selector on the screen which you can use to select the source with <a class="follow" href="#follow">follow mode</a> or with the <a href="#mouse">mouse</a> if page interaction features have not been disabled. It will always show a permission request popup as well, because some websites skip the source selection part, which means they will directly ask for the permission. You might also get more permission requests for related APIs, such as <a href="#permissionmediadevices">permissionmediadevices</a> or <a href="#permissionmicrophone">permissionmicrophone</a>. If those are blocked, the website might incorrectly report that the displaycapture could not be started, but this doesn't have to be the case. When in doubt, you can enable <a href="#notificationforpermissions">notificationforpermissions</a> or check the <a href="#:notifications">notifications page</a> to see which permissions were granted or denied and for what reason.
        <h3 id="permissionfullscreen">permissionfullscreen</h3>
        Permission setting to either allow or block websites from entering fullscreen. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissiongeolocation">permissiongeolocation</h3>
        Permission setting to either allow or block websites from using your location. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionhid">permissionhid</h3>
        Permission setting to either allow or block websites from accessing your Human Interface Devices (HID) devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.
        <h3 id="permissionidledetection">permissionidledetection</h3>
        Permission setting to either allow or block websites from checking the idle state of your device (active/idle and locked/unlocked). When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionmediadevices">permissionmediadevices</h3>
        Permission setting to either allow or block websites from reading the list of connected media devices: microphones, speakers or cameras. You can allow it in three different ways: "allowfull" for the regular media device list response with device name labels, "allow" for a media device list response with empty device labels and finally "allowkind" to return a stripped media device list with all fields besides the kind empty (where kind is one of "audioinput", "audiooutput" or "videoinput"). Some websites rely on the labels to enumerate device types, but it will expose the full device name if selected. With "allowkind" you can list the device kinds/types without their ids or labels, which is enough for websites to know if you have microphones, speakers and/or cameras connected, which is also the default in Chromium when you deny microphone/camera permissions (since there is no separate mediadevices permission in Chromium). It is also highly likely that a website will request this media devices list before requesting access to for example the microphone or the camera. These permissions are separately configured in Vieb using <a href="#permissioncamera">permissioncamera</a> and <a href="#permissionmicrophone">permissionmicrophone</a>, so you will need to allow these as well if you want the website to use these devices. The recommended value that will let sites know your devices without too much risk is "allowkind", otherwise leave it at "block" to give an empty list. Finally, you can (like for any other permission) use the <a href="#permissionsallowed">permissionsallowed</a> and <a href="#permissionsblocked">permissionsblocked</a> settings to select this permission automatically based on site url.
        <h3 id="permissionmicrophone">permissionmicrophone</h3>
        Permission setting to either allow or block websites from using your microphone. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. You will most likely also need to allow <a href="#permissionmediadevices">permissionmediadevices</a> to provide the site with a list of available media devices.
        <h3 id="permissionmidi">permissionmidi</h3>
        Permission setting to either allow or block websites from using the "webmidi" API. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionmidisysex">permissionmidisysex</h3>
        Permission setting to either allow or block websites from using the system exclusive messages of the "webmidi" API. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionnotifications">permissionnotifications</h3>
        Permission setting to either allow or block websites from showing you notifications. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionopenexternal">permissionopenexternal</h3>
        Permission setting to either allow or block websites from opening external applications with arbitrary arguments. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. The popup will also include information about what type of application will be opened if you allow it. This type of popup will for example appear when you click on mailto or magnet links.
        <h3 id="permissionpersistentstorage">permissionpersistentstorage</h3>
        Permission setting to either allow or block websites from storing data in the persistent storage. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionpointerlock">permissionpointerlock</h3>
        Permission setting to either allow or block websites to lock the pointer position. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionsallowed">permissionsallowed</h3>
        With this setting you can make exceptions to the global permission settings. This is done by supplying a regular expression together with a list of permissions that should always be allowed for that pattern/website. This setting is never automatically updated, because the question if you want to store permissions for the session applies to the global setting for that permission. The first entry that matches the pattern and matched the requested permission is used. This setting is not specific to a single type of permission and can even be used to allow multiple permissions for a website automatically. One use case is setting the global <a href="#permissionmediadevices">permissionmediadevices</a> setting to "block" and to allow only specific websites with this setting. For example, to always allow a website such as discord.com access to your mediadevices and microphone, but block it for all other websites, you could run a command similar to this:
        <div class="command-block">:set permissionmediadevices=block permissionmicrophone=block permissionsallowed+=discord.com~microphone~mediadevices</div>
        Of course the regular expression for the discord domain could be made more complex and accurate, but it serves as an example to show that adding sites to this allowed permission list can be easier than you might think. A more accurate regex for matching only a specific domain could be <kbd class="nowrap">^https?://(www\.)?discord\.com.*</kbd>. The first part of any entry in the allow list will be the regular expression to match against the url and all subsequent arguments are names of the permissions to be automatically allowed. Since configuration is done with regex, the configuration is not limited to allowing specific websites, but can also be used to allow only urls prefixed with "https://" or only ".org" top-level domains. For the <a href="#permissionmediadevices">permissionmediadevices</a> setting you can also use "mediadevicesfull" instead of just "mediadevices" to also include the device name labels (empty otherwise), or "mediadeviceskind" to only include the type/kind of device and empty all other fields. The entries in this permission allow list can be overwritten by <a href="#permissionsblocked">permissionsblocked</a> and <a href="#permissionsasked">permissionsasked</a>. The history of all permissions requested are stored in the session's notification history on the <a href="#:notifications">notifications</a> page. If you want a notification to be shown every time a permission is requested by a website, you can enable <a href="#notificationforpermissions">notificationforpermissions</a>.
        For this setting, you can also use the Array or Object based syntaxes:
        <div class="command-block">:set permissionsallowed=[".*youtube\.com.*~notifications", "^https?://(www\.)?discord\.com.*~mediadevices~microphone"]</div>
        <div class="command-block">:set permissionsallowed=[[".*youtube\.com.*", "notifications"], ["^https?://(www\.)?discord\.com.*", "mediadevices~microphone"]]</div>
        <div class="command-block">:set permissionsallowed={".*youtube\.com.*": "notifications", "^https?://(www\.)?discord\.com.*": "mediadevices~microphone"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details. And it works the same for <a href="#permissionsblocked">permissionsblocked</a> and <a href="#permissionsasked">permissionsasked</a>.
        <h3 id="permissionsasked">permissionsasked</h3>
        Use this setting to override global permissions by asking for the permission, regardless of what is configured in <a href="#permissionsallowed">permissionsallowed</a>, <a href="#permissionsblocked">permissionsblocked</a> or the individual permission. It takes priority over all, and will ask the user for confirmation what should happen, similar to setting permissions to "ask". Configuration is the same as the allow and blocklist settings, for example: <kbd class="nowrap">discord.com~displaycapture~camera</kbd> will ask you for display capture (screenshare) and camera permission when requested, regardless of this same permission being listed in other settings.
        <h3 id="permissionsblocked">permissionsblocked</h3>
        The list of blocked permissions works very similar to the <a href="#permissionsallowed">permissionsallowed</a> setting, except that it is used to block specific websites from using a permission. An important thing to note is that blocking permissions with this setting takes priority over allowed and permission-specific configuration. This means that even permissions allowed with the allowed list can be blocked by this setting. This is useful to give all pages of a specific website access to a permission, except for a single subdomain. The entries in this permission block list can be overwritten by <a href="#permissionsasked">permissionsasked</a>.
        <h3 id="permissionsensors">permissionsensors</h3>
        Permission setting to either allow or block websites to read the motion sensors. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionserial">permissionserial</h3>
        Permission setting to either allow or block websites from accessing your serial devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.
        <h3 id="permissionscreenwakelock">permissionscreenwakelock</h3>
        Permission setting to either allow or block websites preventing the screen from dimming and eventually sleeping. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionunknown">permissionunknown</h3>
        Permission setting to either allow or block websites from requesting any permission that is not a part of any of the other categories. These kind of permissions are either recently added by Chromium/Electron or simply not properly mapped by Electron. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="permissionusb">permissionusb</h3>
        Permission setting to either allow or block websites from accessing your usb devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.
        <h3 id="permissionwindowmanagement">permissionwindowmanagement</h3>
        Permission setting to either allow or block websites from accessing the list of screens and their position. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.
        <h3 id="pointerposlocalid">pointerposlocalid</h3>
        With this setting you can control what to use as the identifier for local <a class="pointer" href="#pointer">pointer</a> position storage. By default, this is per domain, but you can also use the exact url. You can list stored pointer positions with <a href=":pointerpos">:pointerpos</a>, and make new ones with <a href="#pointer.storePos">pointer.storePos</a>. Existing stored local positions will not be updated after changing this setting, though global ones will continue to work. To control which positions are stored globally/locally, see the <a href="#pointerpostype">pointerpostype</a> setting. You can delete old ones with <a href=":delpointerpos">:delpointerpos</a>.
        <h3 id="pointerpostype">pointerpostype</h3>
        Using the pointerpostype setting you can choose which keys are considered global and which are local. The difference between them, is that global ones work on every site, while local ones only work on the right domain/url, depending on <a href="#pointerposlocalid">pointerposlocalid</a>. By default, the casing of the key is used to switch between global and local storage, local ones are unshifted, while global ones require you to hold Shift. With this setting you can force local or global ones to be used regardless of shifting.
        <h3 id="quickmarkpersistence">quickmarkpersistence</h3>
        With this setting you can control which type of <a href="#quickmarks">quickmarks</a> to keep on quit. By default, unlike Vim, all marks are kept on quit for the next sessions. If you exclude a quickmark type from the list, it will not be kept on quit. An empty list will delete the file on quit. For actions related to these <a href="#quickmarks">quickmarks</a>, see <a href="#quickmarking">quickmarking</a>.
        <h3 id="quitonlasttabclose">quitonlasttabclose</h3>
        Toggle for quitting Vieb automatically when the last opened tab is closed. By default this is disabled, so that when the last tab is closed a new empty tab is opened. If this toggle is enabled, Vieb will quit if the last tab is closed using <a href="#:close">:close</a>.
        <h3 id="redirects">redirects</h3>
        With this setting you can configure automatic redirects for navigating to websites. You can configure as many redirects as you want, using a comma-separated list. As with other settings of this type, you can append new entries without typing out the current value, as explained in the <a href="#:set">:set</a> command paragraph. Every comma-separated entry should also contain a ~ to separate the original and the replacement. These parts are configured using regular expressions. For example, to redirect all reddit requests to old.reddit.com, run this command:
        <div class="command-block">:set redirects+=^https?://(www\.)?reddit\.com(/((?!media).*)$|$)~https://old.reddit.com$2</div>
        If you want to make this the only redirect and remove all existing ones, use "redirects=..." instead of "redirects+=...". Although regex might not be the most intuitive way to configure redirects, it does give you full flexibility. The one default redirect that is configured with this setting is to skip the tracking call to Google for AMP url, and redirect to the actual url locally. The default redirects might be expanded in the future to prevent other similar request leaks and to prevent remote tracking for simple redirects. To automatically redirect to http for websites without https, see <a href="#redirecttohttp">redirecttohttp</a>. You can also set the above example with any of these Array or Object based syntaxes:
        <div class="command-block">:set redirects=["^https?://(www\.)?reddit\.com(/((?!media).*)$|$)~https://old.reddit.com$2"]</div>
        <div class="command-block">:set redirects=[["^https?://(www\.)?reddit\.com(/((?!media).*)$|$)", "https://old.reddit.com$2"]]</div>
        <div class="command-block">:set redirects={"^https?://(www\.)?reddit\.com(/((?!media).*)$|$)": "https://old.reddit.com$2"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="redirecttohttp">redirecttohttp</h3>
        Toggle for automatically redirecting to http for websites without https. Although technically possible with the redirects setting, this option will only redirect for websites that do not have https. Vieb will assume all websites to have https, and this setting configures whether to redirect websites to http when the https version could not be loaded. If this option is disabled, you will be shown an error page for http-only websites with the exact cause of the error and a link to the http version. To directly visit a http-only website without enabling this setting, you need to specify the http:// protocol explicitly, otherwise Vieb will navigate to the https version automatically.
        <h3 id="reloadtaboncrash">reloadtaboncrash</h3>
        With this toggle you can control if crashed tabs should be recreated automatically in place of the crashed one. The last known url of the crashed tab will be used to create a new tab in the background and add it in place of the old one. The internal mechanism is similar to switching with <a href="#containernames">containernames</a>, and as such your browsing history of that tab is not kept. Crashed tabs are by default bright red in the tab bar, and further interaction with these tabs is not possible, except for recreating it using <a href="#action.refreshTab">action.refreshTab</a> or closing the tab with <a href="#:close">:close</a>. Before a tab crashes, it might be marked as unresponsive with a small red indicator on the left of the tab, similar to the orange current tab indicator when using <a href="#splits">splits</a>.
        <h3 id="replacespecial">replacespecial</h3>
        Using the replacespecial setting you can control when <a href="#specialpages">special pages</a> should replace the current tab. Currently this is done when the current tab is viewing any of the <a href="#specialpages">special pages</a>, but this can also be changed to navigate to the special page in the current tab at all times with "always", or only when it's the new tab page with "newtab". Finally you can choose to "never" replace the current tab with a special page and always open special commands in a new tab, which you can also force by appending a "!" to the command.
        <h3 id="replacestartup">replacestartup</h3>
        With this setting you can control when pages called on startup or from other applications will replace the current tab. By default it will never do this, but you can choose to do this when the current tab is the newtab page (empty) or do this everytime with "always".
        <h3 id="requestheaders">requestheaders</h3>
        The requestheaders setting can be used to add custom headers to all requests. This can be useful for debugging a server or for testing custom login methods. It is a powerful setting that is best left empty for most general use cases, as setting invalid headers could lead to requests being blocked by servers. The setting is an object, where each key is a header name, and each value the contents of that header, such as <span class="command-block">{"X-Forwarded-For": "100.0.0.0"}</span>. Like other Array and Object type settings, you can use that syntax to change this setting, for example to modify the X-Forwarded-For and the Accept-Language setting:
        <div class="command-block">:set requestheaders=X-Forwarded-For~100.0.0.0,Accept-Language~en-US</div>
        <div class="command-block">:set requestheaders=["X-Forwarded-For~100.0.0.0", "Accept-Language~en-US"]</div>
        <div class="command-block">:set requestheaders=[["X-Forwarded-For", "100.0.0.0"], ["Accept-Language", "en-US"]]</div>
        <div class="command-block">:set requestheaders={"X-Forwarded-For": "100.0.0.0", "Accept-Language": "en-US"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details. All of these will do the same thing, but the Object and Array syntaxes have the advantage of supporting values with commas and tildes. Additionally, it is possible to remove default headers with this setting, by prefixing the name with a dash "-". If you want to remove the "Accept" header, modify the "Accept-Language" header and empty the "Cookie" header, you could do this:
        <div class="command-block">:set requestheaders=-Accept,Accept-Language~en-US,Cookie~</div>
        <div class="command-block">:set requestheaders=["-Accept", "Accept-Language~en-US", "Cookie~"]</div>
        <div class="command-block">:set requestheaders=[["-Accept"], ["Accept-Language", "en-US"], ["Cookie", ""]]</div>
        <div class="command-block">:set requestheaders={"-Accept": "", "Accept-Language": "en-US", "Cookie": ""}</div>
        Having a header name in the list with a "-" in front will make sure that header is never send to any server.
        <h3 id="requesttimeout">requesttimeout</h3>
        Duration in milliseconds before stopping a page load automatically. The timer is reset upon navigation to any page and after the timeout duration is reached, the page load will be stopped automatically, similar to calling <a href="#action.stopLoadingPage">action.stopLoadingPage</a> manually. A duration of 0 milliseconds will disable the timeout completely, which could mean that some websites will never stop loading.
        <h3 id="resourcesallowed">resourcesallowed</h3>
        With this setting you can override which resource requests are always allowed for a given url pattern. This setting is a list of regular expression patterns, if any pattern matches for a resource url or the page url it will be allowed, regardless of any blocking done by <a href="#resourcesblocked">resourcesblocked</a>. The list is separated by commas and will allow all types of resources if the pattern matches, but you can also only allow specific resources for each pattern by appending as many resource types as you want separated by a "~". For example, to always allow images and stylesheets to be loaded on urls or resources that include duckduckgo.com, run <span class="command-block">:set resourcesallowed+=.*duckduckgo.com.*~image~stylesheet</span>. You can combine this with <a href="#resourcesblocked">resourcesblocked</a> and <a href="#resourcetypes">resourcetypes</a> to gain full control over which resources are allowed or not allowed to be loaded. See <a href="#resourcetypes">resourcetypes</a> to configure the default types and read more about which resource types there are. You can also set the above example with any of these Array or Object based syntaxes:
        <div class="command-block">:set resourcesallowed=[".*duckduckgo.com.*~image~stylesheet"]</div>
        <div class="command-block">:set resourcesallowed=[[".*duckduckgo.com.*", "image~stylesheet"]]</div>
        <div class="command-block">:set resourcesallowed={".*duckduckgo.com.*": "image~stylesheet"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="resourcesblocked">resourcesblocked</h3>
        With this setting you can override which resource requests are blocked for a given url pattern. This setting is a list of regular expression patterns, if any pattern matches for a resource url or the page url it will be blocked, unless it's allowed again with <a href="#resourcesallowed">resourcesallowed</a>. Similar to the allow setting, you can choose to only use patterns in the list or optionally append specific resource types to block. For example, to block scripts and fonts from loading on urls or resources that include youtube.com, run <span class="command-block">:set resourcesblocked+=youtube.com~script~font</span>. The pattern can be much more complex, and you can include as little or many resources to be blocked as needed. Listing no specific resource types after a pattern will block every resource matching the url regex pattern.
        <h3 id="resourcetypes">resourcetypes</h3>
        The general fallback setting for which resource types should be loaded or blocked. This setting can be overridden by both <a href="#resourcesblocked">resourcesblocked</a> and <a href="#resourcesallowed">resourcesallowed</a>. If a resource type is disabled with this setting, it will not be loaded for any external pages, unless it is allowed again with <a href="#resourcesallowed">resourcesallowed</a>. If set to an empty list, you can use Vieb as a minimal HTML-only browser. The following resource types can be loaded or blocked with these resource settings:
        <ul>
            <li><kbd>object</kbd> - Embedded object such as PDFs or documents. Does not include the built-in PDF reader (see <a href="#pdfbehavior">pdfbehavior</a> nor iframes.</li>
            <li><kbd>script</kbd> - All JavaScript resources, can be used as a NoScript alternative when combined with regex blocking/allowing. Inline scripts cannot be blocked, as these are part of the HTML.</li>
            <li><kbd>media</kbd> - HTML5 video and audio files, does not include custom video elements.</li>
            <li><kbd>image</kbd> - All images including gifs.</li>
            <li><kbd>stylesheet</kbd> - All stylesheet (CSS) files.</li>
            <li><kbd>font</kbd> - Any custom web font, native fonts are excluded.</li>
            <li><kbd>xhr</kbd> - External requests to other resources using fetch or XMLHttpRequest.</li>
            <li><kbd>ping</kbd> - Ping requests to check for server status.</li>
            <li><kbd>websocket</kbd> - Requests to websocket protocols.</li>
        </ul>
        Detection of these resource types relies on the internal Chromium request response types and as such cannot be customized or improved to work more reliable or handle other types.
        <h3 id="restoretabs">restoretabs</h3>
        This setting controls if tabs you had open during the previous browsing session should be restored. By default all tabs you had open when you quit Vieb last time will automatically open again when you start Vieb. If you have configured any <a href="#startuppages">startuppages</a>, they will be opened after restoring the previous tabs. If this setting is set to "pinned", regular tabs won't be restored, but will possibly be stored as recently closed tabs so you can reopen them, which is configured with <a href="#keeprecentlyclosed">keeprecentlyclosed</a>. Tabs which are pinned by the <a href="#:pin">:pin</a> command are still restored if set to "pinned". With the "regular" and "none" options, you can choose to not restore pinned tabs, but only regular ones or none at all. The container and muted state of each tab is always remembered on restart. You can control if restored tabs are loaded or not with <a href="#suspendonrestore">suspendonrestore</a>.
        <h3 id="scrollposlocalid">scrollposlocalid</h3>
        With this setting you can control what to use as the identifier for local scroll position storage. By default, this is per domain, but you can also use the exact url. You can list stored scroll positions with <a href=":scrollpos">:scrollpos</a>, and make new ones with <a href="#action.storeScrollPos">action.storeScrollPos</a>. Existing stored local positions will not be updated after changing this setting, though global ones will continue to work. To control which positions are stored globally/locally, see the <a href="#scrollpostype">scrollpostype</a> setting. You can delete old ones with <a href=":delscrollpos">:delscrollpos</a>.
        <h3 id="scrollpostype">scrollpostype</h3>
        Using the scrollpostype setting you can choose which keys are considered global and which are local. The difference between them, is that global ones work on every site, while local ones only work on the right domain/url, depending on <a href="#scrollposlocalid">scrollposlocalid</a>. By default, the casing of the key is used to switch between global and local storage, local ones are unshifted, while global ones require you to hold Shift. With this setting you can force local or global ones to be used regardless of shifting.
        <h3 id="searchengine">searchengine</h3>
        Set the search engine(s). This setting is used as the base url(s) for requests that do not look like a url. The searchengine setting must be set to a valid url and must include "%s", which will be replaced with your search. You can also set multiple urls as a list, one of which will be picked at random. To make a web search, call <a href="#action.useEnteredData">action.useEnteredData</a> after entering your search in <a class="explore" href="#explore">explore mode</a>. If you want to use a light theme for you searches, you could switch the "kae=d" part of the searchengine setting to "kae=g". For more information about these search settings, see the <a href="https://duckduckgo.com/settings" target="_blank">DuckDuckGo settings page</a>. Of course it's also possible to use a completely different search engine, switching between them can also be simplified with <a href="#customcommands">custom commands</a>. For example, to switch to the light version of DuckDuckGo in combination with switching to Vieb's light colorscheme, you can so something like this:
        <div class="command-block">command! light &lt;:colorscheme light&gt;&lt;:set searchengine=https://duckduckgo.com/?kae=g&q=%s&gt;</div>
        If you want to use multiple search engines, you could use <a href="#searchwords">searchwords</a>. If you want to use a random search engine each time you search, you should set the searchengine setting to a list of search base urls. This can for example be useful for spreading your searches across multiple instances of a specific search engine. If you empty the searchengine setting, you will disable search functionality completely, though other type of <a class="explore" href="#explore">explore mode</a> navigations are still possible.
        <h3 id="searchemptyscope">searchemptyscope</h3>
        <p>DEPRECATION: This setting will no longer be relevant in 13.0.0 because all searches will be global, instead you can use <a href="#searchreach">searchreach</a> to control when searches should be shown.</p>
        This setting is used to control which scope of <a class="search" href="#search">search mode</a> searches should be cleared when calling <a href="#action.emptySearch">action.emptySearch</a>. By default, only global searches are cleared with this action. This means, that searches specific to the current tab will stay. If you also want to empty the local searches, you can adjust this setting to do so. To make local searches instead of global ones, you need to update the <a href="#searchscope">searchscope</a> setting.
        <h3 id="searchpointeralignment">searchpointeralignment</h3>
        With this setting you can control where the pointer should appear in relation to the searched text on the page, which happens when calling <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a> from <a class="pointer" href="#pointer">pointer mode</a>, after you have made a search using <a class="search" href="#search">search mode</a>. By default, the pointer will align to the left of the search highlight, but you can also configure it to align to the right or the center.
        <h3 id="searchreach">searchreach</h3>
        This setting controls which tabs should visibly apply the searches done with <a class="search" href="#search">search mode</a>. By default, only visible pages (so <a href="#splits">splits</a> but not background pages) are updated with the new search query. The query is shared across all tabs, but not shown in background tabs by default, until you use <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a>. This is done so that background tabs are not scrolled to results further down the page in the background, as to prevent accidental scroll differences. In case you want searches to be visible immediately even for background pages, you can use "all" instead of "visible" for this setting. In case you only want to update the current page with the search and not <a href="#splits">splits</a> nor background pages, you can adjust it to "current". The way to make the results visible after the search for any pages that do not show them yet is always to use <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a>. You can control this setting's behavior separately for incremental searches with <a href="#searchreachinc">searchreachinc</a>, and for the search match actions using <a href="#searchreachtraverse">searchreachtraverse</a>. If the results are not visible for a page, the results are also not known yet, even if <a href="#showsearchresults">showsearchresults</a> is enabled, until you make the results visible with the previous/next traverse actions.
        <h3 id="searchreachinc">searchreachinc</h3>
        With searchreachinc you can control if <a href="#incsearch">incsearch</a> incremental searches should apply directly to other pages or not. By default, it copies the value of <a href="#searchreach">searchreach</a> with "same" so that only visible pages will immediately show search queries. By changing the value of this setting, you can separately configure the pages that should show the results immediately specifically for incremental searches, controlled with <a href="#incsearch">incsearch</a>.
        <h3 id="searchreachtraverse">searchreachtraverse</h3>
        With searchreachtraverse you can control if <a href="#action.nextSearchMatch">action.nextSearchMatch</a> or <a href="#action.previousSearchMatch">action.previousSearchMatch</a> should also trigger on other pages or not. By default, it copies the value of <a href="#searchreach">searchreach</a> with "same" so that only visible pages move to the next or previous search match with these actions. By changing the value of this setting, you can separately configure the pages that should move to the next or previous matches when these actions are called.
        <h3 id="searchscope">searchscope</h3>
        <p>DEPRECATION: This setting will no longer be relevant in 13.0.0 because all searches will be global, instead you can use <a href="#searchreach">searchreach</a> to control when searches should be shown.</p>
        With the searchscope setting you can change which type of <a class="search" href="#search">search mode</a> searches should be made. By default, only global searches are used, which means the same search string is used for all tabs. This can be annoying if you are using lots of splits and don't want all of them to scroll all at once. In this case you can choose to use "incsearch", which will use local searching if you are using the <a href="#incsearch">incsearch</a> setting, but only while you are typing out your search and incrementally showing it. As soon as you execute <a href="#action.useEnteredData">action.useEnteredData</a> the search will become a global one. If you cancel your incremental search, the local search will be cleared. Searches made from the <a href="#menu">menu</a> will still be global as well. Finally you can also use "local" as a value to always make a local search, regardless of method. This also makes the <a href="#menu">menu</a> searches local.
        <h3 id="searchwords">searchwords</h3>
        A setting to optionally define a series of searchwords, which can be used to perform searches when in <a class="explore" href="#explore">explore mode</a>. This is equivalent to the "Keyword Search" or "Smart Keywords" features in other browsers. For example:
        <div class="command-block">:set searchwords+=yt~youtube.com/results?search_query=%s,imdb~imdb.com/find?q=%s</div>
        Entering <a class="explore" href="#explore">explore mode</a> and typing 'yt [some query]' will visit the YouTube search results page for that query, and 'imdb [some query]' will search IMDB.com. Searchwords can only contain letters, numbers and underscores, while the URL can contain any number of "%s". In your query after the searchword, you can include commas which will be split and spread across multiple %s entries in the url. If more comma-separated values are given than the number of "%s" in the url, the exceding values will be appended to the last given value and the commas left as is. If there are more "%s" entries than there are comma-separated values, the remaining ones are left empty. This also means that urls with a single "%s" can include commas without using this mechanism. The resulting url is always displayed in the suggestions for clarity. The border of the navigation bar will change color if a searchword will trigger, see <a class="explore" href="#explore">explore mode</a> for details. For changing the default search engine that does not require any prefixed searchword, see the <a href="#searchengine">searchengine</a> setting. Like other Array and Object type settings, you can use that syntax to change this setting, the example above can also be set like this:
        <div class="command-block">:set searchwords=["yt~youtube.com/results?search_query=%s", "imdb~imdb.com/find?q=%s"]</div>
        <div class="command-block">:set searchwords=[["yt", "youtube.com/results?search_query=%s"], ["imdb", "imdb.com/find?q=%s"]]</div>
        <div class="command-block">:set searchwords={"yt": "youtube.com/results?search_query=%s", "imdb": "imdb.com/find?q=%s"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="shell">shell</h3>
        Configure the shell to use for all native commands that are called from Vieb. This applies to <a href="#externalcommand">externalcommand</a>, <a href="#vimcommand">vimcommand</a> (and thus <a href="#action.editWithVim">action.editWithVim</a>) and is also used for commands that start with "!", as these are run directly as entered. For example, entering <a class="command" href="#command">command mode</a> and then running "!gvim" will run the "gvim" system command in the shell configured by this setting. If no shell is configured, it will by default use the "$SHELL" environment variable or fallback to "/bin/sh" on Unix-like systems, and read the "ComSpec" environment variable on Windows, which usually defaults to "cmd".
        <h3 id="showcmd">showcmd</h3>
        Toggle for showing the history of recently pressed keys in the top-right corner. It will only show the keys if there are mappings that require multiple keys. The keys are reset when no more mappings exist that start with the currently pressed keys. The showcmd option also shows the repeat count for <a class="normal" href="#normal">normal mode</a>, <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a>. It also controls if a notice is shown for active action macro recordings, see <a href="#record">record</a> for details. By default, you will also get suggestions for subsequent keys, this is controlled by a different setting named <a href="#mapsuggest">mapsuggest</a>.
        <h3 id="showsearchresults">showsearchresults</h3>
        Toggle to control if search results should be shown in the top-right corner. By default it will show the count and if there are no matches for the entered search text. If you move to other tabs, the count will only be shown if the previous search applied to this tab, which can be controlled with the <a href="#searchreach">searchreach</a> setting, or when moving to the previous/next search with <a href="#action.previousSearchMatch">action.previousSearchMatch</a> and <a href="#action.nextSearchMatch">action.nextSearchMatch</a> respectively, which can also apply to other tabs using <a href="#searchreachtraverse">searchreachtraverse</a>.
        <h3 id="smartcase">smartcase</h3>
        With this toggle you can enable or disable smartcase. When smartcase is on, lowercase searches of <a class="search" href="#search">search mode</a> will be case insensitive, and search queries with any capital letter will be case sensitive. If this feature is enabled, the value of <a href="#ignorecase">ignorecase</a> is not used to determine case sensitivity. When smartcase is off, you can control if searches are to be case sensitive with <a href="#ignorecase">ignorecase</a> instead.
        <h3 id="spell">spell</h3>
        Toggle for enabling the spellchecker for text in input fields or textareas. The list of languages can be changed with the <a href="#spelllang">spelllang</a> setting.
        <h3 id="spelllang">spelllang</h3>
        Set the list of languages to be checked by the spellchecker. The list of languages is provided by Electron and depends on your operating system. On Mac, this setting has no effect, as the built-in languages are always used. The "system" value will try to find the best matching language from the supported ones based on your system locale. If it can't find one, the "system" value will be ignored.
        <h3 id="splitbelow">splitbelow</h3>
        Toggle to split below or above the current window when invoking <a href="#:Sexplore">:Sexplore</a>.
        <h3 id="splitright">splitright</h3>
        Toggle to split right or left of the current window when invoking <a href="#:Vexplore">:Vexplore</a>.
        <h3 id="sponsorblock">sponsorblock</h3>
        Toggle to enable/disable a custom sponsorblock implementation that runs on all pages appear to have a url ending in a watch id. Sponsorblock can be used to skip sponsors inside of videos on websites like Youtube and related websites such as Invidious. The only criteria for sponsorblock to work is that the url has Youtube watch id and that the video element supports setting the current time. Which categories are skipped and what color they are displayed with in the bar is controlled with <a href="#sponsorblockcategories">sponsorblockcategories</a>. You must reload the page for this setting to take effect.
        <h3 id="sponsorblockcategories">sponsorblockcategories</h3>
        Controls which categories are skipped automatically and which color they are displayed as in the player bar. By default all categories are enabled, but sponsorblock itself isn't. To remove a category, simply do <span class="command-block">:set sponsorblockcategories-=categoryname</span> where "categoryname" is the name of any sponsorblock category. You can also change the colors using this setting, by appending a value with the new color: <span class="command-block">:set sponsorblockcategories-=categoryname sponsorblockcategories+=categoryname~color</span>. The color is optional and can be any CSS color name or a hex value of a color such as "#f00" for pure red. You must reload the page for this setting to take effect. As with other Array and Object type settings, you can also use any of these syntaxes, where interaction will be red, intros in the default color and other categories not skipped:
        <div class="command-block">:set sponsorblockcategories=["interaction~red", "intro~cyan"]</div>
        <div class="command-block">:set sponsorblockcategories=[["interaction", "red"], ["intro", "cyan"]]</div>
        <div class="command-block">:set sponsorblockcategories={"interaction": "red", "intro": "cyan"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="startuppages">startuppages</h3>
        With this setting you can configure a list of pages that should open every time Vieb is started. The list should be comma-separated and all entries must be valid urls. These pages will open regardless of tabs being restored from the previous session, so combining both of these setting might not get the expected results. See <a href="#restoretabs">restoretabs</a> for details about restoring tabs from the previous session. You can optionally suffix each url in the startuppages list with the following options: container name, muted and pinned, separated by a "~". The container name can be any valid name as explained in <a href="#containerstartuppage">containerstartuppage</a>. The muted and pinned options are there to make a page muted or pinned, as they are neither by default. An example startuppage entry combining this can look like this:
        <div class="command-block">:set startuppages=vieb.dev~vieb_container~muted~pinned,github.com~s:usecurrent~pinned,github.com/Jelmerro/Vieb</div>
        As with other Array and Object type settings, you can also use any of these syntaxes to do the same:
        <div class="command-block">:set startuppages=["vieb.dev~vieb_container~muted~pinned", "github.com~s:usecurrent~pinned", "github.com/Jelmerro/Vieb"]</div>
        <div class="command-block">:set startuppages=[["vieb.dev", "vieb_container~muted~pinned"], ["github.com", "s:usecurrent~pinned"], ["github.com/Jelmerro/Vieb"]]</div>
        <div class="command-block">:set startuppages={"vieb.dev": "vieb_container~muted~pinned", "github.com": "s:usecurrent~pinned", "github.com/Jelmerro/Vieb": ""}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="storenewvisits">storenewvisits</h3>
        A setting to indicate if new visits to websites should be stored in the browsing history. It is a list that contains the type of visits that should be added to the history. If a specific type is missing from the list, the visited page will not be stored in the browsing history, and as a result the favicon will also not be stored. The "files" type is for local files, and if enabled will store visits to local files in the browsing history. The "special" type is for Vieb's <a href="#specialpages">special pages</a>, and if enabled will store visits to these pages in the browsing history. The "sourceviewer" type is for Vieb's source viewer, which can be opened with <a href="#action.toggleSourceViewer">toggleSourceViewer</a> action or using the sourceviewer:// protocol. The "markdownviewer" type is for Vieb's Markdown viewer, which can be opened with <a href="#action.toggleMarkdownViewer">toggleMarkdownViewer</a> action or using the markdownviewer:// protocol. The "readerview" type is for Vieb's reader view, which can be opened with <a href="#action.toggleReaderView">toggleReaderView</a> action or using the readerview:// protocol. All other type of visits fall under the "pages" category. You can control how the browsing history is suggested in <a class="explore" href="#explore">explore mode</a> using the <a href="#suggestorder">suggestorder</a> setting. The download history, cookies, localstorage and tab history are preserved regardless of these settings. To privately navigate to a website, also use a separate container using <a href="#containernewtab">containernewtab</a> and disable the <a href="#keeprecentlyclosed">keeprecentlyclosed</a> setting. The explore and command history are also stored inside the datafolder as "explorehist" and "commandhist", you can safely remove them, or change the storage mechanism with the <a href="#explorehist">explorehist</a> and <a href="#commandhist">commandhist</a> settings. Finally, consider using a separate <a href="#datafolder">datafolder</a> to open a completely separate instance of Vieb.
        <h3 id="suggestbouncedelay">suggestbouncedelay</h3>
        This setting can be used to control the delay in milliseconds between suggestions in <a class="command" href="#command">command mode</a> and <a class="explore" href="#explore">explore mode</a> mode. It is basically used as the bounce delay when typing fast. By default this delay is quite low to keep a high responsiveness, but you can increase it to speedup <a class="explore" href="#explore">explore mode</a> suggestions. If set to zero, this debounce mechanism is disabled, and all suggestions are computed immediately, which was the case in older Vieb releases.
        <h3 id="suggestcommands">suggestcommands</h3>
        The number of suggestions that should appear when typing commands. Set to 0 to disable any suggestions while in <a class="command" href="#command">command mode</a>.
        <h3 id="suggestorder">suggestorder</h3>
        With this setting, you can control the suggestions for <a class="explore" href="#explore">explore mode</a>. It's a list of different suggestion types, which will appear grouped by type as suggestions in the order of this setting. By default, the limit of suggestions per category is 10, but this can be changed by appending entries with a count like so: "history~5". It's also possible to change the sort order of the suggestion within each category itself, which you can do the same way, for example: "searchword~setting". The count can be any valid number, but must be above 0. If you don't want a specific type of suggestions, just remove that type from the list: "searchword~5~setting,history". This example will show up to 5 searchwords sorted by setting appearance, no file suggestions and then 10 history sites sorted by relevance. As shown with the examples, you can change the sort order. Which orders are valid changes between different types. For history you can sort on: "alpha" to alphabetically sort all matching results, "relevance" (default) to sort based on a combination of visits and overlap of search terms, and "date" to sort based on last visit for all matching entries. The "file" suggestions can only be sorted on "alpha", which is also the default. The "searchword" suggestions can be sorted on "alpha" and "setting" to use the order in which they are added to the <a href="#searchwords">searchwords</a> setting. All three suggestion types can optionally be modified with a count and a sort as explained above. This way you can completely customize the suggestions of <a class="explore" href="#explore">explore mode</a>. For clarity, the default "history,searchword,file" is identical to "history~relevance~10,searchword~10~alpha,file~10". You can switch between suggestions with <a href="#action.nextSuggestion">action.nextSuggestion</a> and <a href="#action.prevSuggestion">action.prevSuggestion</a>, or between different sections with <a href="#action.nextSuggestionSection">action.nextSuggestionSection</a> and <a href="#action.prevSuggestionSection">action.prevSuggestionSection</a>. As with other Array and Object type settings, you can also use any of these syntaxes to do the same as the default with explicit sort and count:
        <div class="command-block">:set suggestorder=["history~relevance~10", "searchword~10~alpha", "file~10"]</div>
        <div class="command-block">:set suggestorder=[["history", "relevance~10"], ["searchword", "10~alpha"], ["file", "10"]]</div>
        <div class="command-block">:set suggestorder={"history": "relevance~10", "searchword": "10~alpha", "file": "10"}</div>
        This also works for append, remove and special actions of the set command, see <a href="#:set">:set</a> for details.
        <h3 id="suggesttopsites">suggesttopsites</h3>
        The number of top visited sites that should be shown on the new tab page. These sites are your most visited websites based on your local browsing history. This setting can be set to 0 to disable the top sites from appearing on the new tab page. Alternatively, you can also specify a list of favorite websites that should always be shown on the new tab page using the <a href="#favoritepages">favoritepages</a> setting. These settings are unused if you set a custom new tab page with <a href="#newtaburl">newtaburl</a>.
        <h3 id="suspendbackgroundtab">suspendbackgroundtab</h3>
        With this setting you can toggle if background tabs should be suspended. Background tabs are tabs that are opened by the user but not immediately switched to, such as when <a href="#mousenewtabswitch">mousenewtabswitch</a> is false, or when <a class="follow" href="#action.startFollowNewTab">follow mode</a> is used to open sites in a new tab while holding Shift to not switch to them (which can also be forced by disabling <a href="#follownewtabswitch">follownewtabswitch</a>).
        <h3 id="suspendonrestore">suspendonrestore</h3>
        Toggle for restoring tabs in suspended state. Specify which tabs (if any) should not be loaded on startup, but only be listed as opened. These tabs will only be loaded after switching to them. This option is useful to make Vieb start up faster. You can choose to enable it for all tabs or only for tabs that are not pinned (regular). It only has an effect if <a href="#restoretabs">restoretabs</a> is enabled.
        <h3 id="suspendtimeout">suspendtimeout</h3>
        Setting to automatically suspend tabs when they aren't opened for a specific amount of time. A value of 0 milliseconds will disable the timeout suspend feature. This setting can be useful to decrease the RAM usage of Vieb. Keep in mind that the page is completely unloaded when tabs are suspended. You can also suspend any background tab manually with <a href="#:suspend">:suspend</a>, regardless of the value of this setting. When this timeout is set to suspend really quickly, basically the only tabs that will be loaded are ones that are visible. The timers will be restarted with the new value when updating this setting. You can exclude specific pages from being suspended by adding a range that selects that page to <a href="#suspendtimeoutignore">suspendtimeout</a>.
        <h3 id="suspendtimeoutignore">suspendtimeoutignore</h3>
        This setting contains a list of <a href="#ranges">ranges</a> that will be used to exclude them from being suspended by <a href="#suspendtimeout">suspendtimeout</a>. You can still manually suspend them with <a href="#:suspend">:suspend</a>. A page will be excluded if any of the ranges in the ignore list match the current tab/page, either via url search, title search, index or by any of the flags. Keep in mind that you probably want to use the "g" global flag too so that it will not just exclude the first match. For example, "p//" will exclude the first pinned tab from being suspended, while "gp//" will prevent any pinned tabs from being suspended automatically. The current default is "ga//" and "gp//", meaning any audio playing tab or pinned tab is excluded.
        <h3 id="tabclosefocus">tabclosefocus</h3>
        Using this setting you can control which tab should be focused when closing the current tab, by default the tab to the left. If set to "right", the tab on the right will be focused instead. You can also choose to focus the <a href="#lastusedtab">last used tab</a> with the "previous" value. This setting isn't used when closing other tabs, but only when closing the current one. Also see <a href="#:close">:close</a>.
        <h3 id="tabcycle">tabcycle</h3>
        This toggle indicates if the tabs should cycle from the last to the first and the other way around. If enabled, you can switch to the first tab by executing <a href="#action.nextTab">action.nextTab</a> when already at the last tab. If disabled, the next tab action will not have any effect and you will remain on the last tab. The same logic applies to calling <a href="#action.previousTab">action.previousTab</a> while already on the first tab.
        <h3 id="tabnewposition">tabnewposition</h3>
        Control the position that a newly opened tab should have relative to the current one. By default, it will be right of the current one, but it can also be set to left, the start or the end of the bar. The command for opening a new tab is <a href="#:tabnew">:tabnew</a>. This setting also affects <a href="#action.openNewTabWithCurrentUrl">action.openNewTabWithCurrentUrl</a>. This setting does not affect tabs which are restored with <a href="#action.reopenTab">action.reopenTab</a>, see <a href="#tabreopenposition">tabreopenposition</a> for that.
        <h3 id="tabopenmuted">tabopenmuted</h3>
        This setting controls if newly opened tabs should be muted. You can choose to do this for all tabs, or only for background tabs. This setting has no influence over reopened tabs, see <a href="#tabreopenmuted">tabreopenmuted</a> for that.
        <h3 id="taboverflow">taboverflow</h3>
        This setting is dependent on the <a href="#mintabwidth">mintabwidth</a> setting, because that influences when tabs will no longer fit in the tabbar. The value of this setting will not be used if the mintabwidth is set to 0, because in that case tabs will never overflow. When the tabs do not fit in the bar, this setting will configure the appearance of the tabs that cannot fit. When set to "wrap", the tabbar will use multiple rows to make sure all tabs are always displayed. When set to "scroll", a scrollbar will appear to indicate that there are more tabs than the ones currently shown. When set to hidden, the same layout is used as with scroll, but the scrollbar will not be displayed.
        <h3 id="tabreopenmuted">tabreopenmuted</h3>
        This setting controls if reopened tabs should be muted. You can choose to do this for all tabs, or make them remember the if they were muted when you closed them. This does not influence newly opened tabs, see <a href="#tabopenmuted">tabopenmuted</a> for that.
        <h3 id="tabreopenposition">tabreopenposition</h3>
        With this setting you can decide at which position a tab should appear when it's reopened with <a href="#action.reopenTab">action.reopenTab</a>. With "previous", the previous position is restored for this tab: if it was at index x when it was closed, it will be restored at that same index (or the nearest equivalent) when reopened.
        <h3 id="timeout">timeout</h3>
        Toggle to indicate if pressed keys that are part of a sequence should expire after <a href="#timeoutlen">timeoutlen</a>.
        <h3 id="timeoutlen">timeoutlen</h3>
        The amount of milliseconds that previously pressed keys are stored as currently pressed keys. When set to a low amount, you have less time to press keys that are part of a <a href="#mappings">mapping</a> with multiple subsequent keys. The pressed keys will be displayed in the topright of the window, if <a href="#showcmd">showcmd</a> is enabled. To never expire any pressed keys, disable <a href="#timeout">timeout</a>. The timeoutlen setting is also used to control how long you should focus a tab or window split before it will be registered as the last active one when switching tabs, which is used for the <a href="#lastusedtab">lastusedtab</a>. When keys are pressed that require multiple subsequent keys, you will also get mapping suggestion for which keys to press next, which can be controlled with <a href="#mapsuggest">mapsuggest</a> and <a href="#mapsuggestposition">mapsuggestposition</a>.
        <h3 id="tocpages">tocpages</h3>
        This setting is a list of regular expressions to control which pages should show the table of contents on page load. You can also toggle the table of contents with <a href="#action.toggleTOC">action.toggleTOC</a>, but this setting merely controls if it should load by default for a specific page. Each regular expression in the list is matched against the url, and if it matches it will show the table of contents. For example, to show the TOC on this help page and the markdownviewer by default, run <span class="command-block">set tocpages=vieb://help,^markdownviewer:</span>. The TOC can be interacted with using <a class="follow" href="#follow">follow mode</a>, <a class="pointer" href="#pointer">pointer mode</a>, the <a href="#mouse">mouse</a> or basically any other way you interact with the page.
        <h3 id="translateapi">translateapi</h3>
        Switch between different translate APIs to use for the <a href="#:translatepage">:translatepage</a> command. By default, this will detect the API automatically based on the <a href="#translateurl">translateurl</a>, but it can be set to the right API by name, to make sure the right API is used. The Deepl API has these advantages: free to use, easy to configure and very good translations. The LibreTranslate API has these advantages: self-hosted open source option and supports many languages. If you prefer open source self-hosted software, opt for LibreTranslate. If you want something free that just works, use Deepl Free.
        <h3 id="translatekey">translatekey</h3>
        Set the API key for the <a href="#:translatepage">:translatepage</a> command. Depending on if you use Deepl or LibreTranslate, you can find your API key in the <a href="https://www.deepl.com/account/summary">Deepl account dashboard</a> or in the <a href="https://portal.libretranslate.com/">LibreTranslate portal</a>. Deepl offers free API access, but in case you have a pro account it is recommended to update <a href="#translateurl">translateurl</a> to the pro API base url. LibreTranslate is paid if you use the hosted version, but you can self-host the app as well, which does not require an API key to be set, see the <a href="https://github.com/LibreTranslate/LibreTranslate">LibreTranslate github repo</a> for details.
        <h3 id="translatelang">translatelang</h3>
        Choose a default language to translate to with the <a href="#:translatepage">:translatepage</a> command via Deepl or LibreTranslate. For a list of languages, see <a href="https://www.deepl.com/docs-api/translate-text/">the official Deepl documentation</a> or <a href="https://libretranslate.com/languages">the LibreTranslate language endpoint</a>. You must set an API key with <a href="#translatekey">translatekey</a> if you use an online translation API, and you can change the API endpoint with <a href="#translateurl">translateurl</a>. The list of valid languages varies between the different APIs, so please check the supported language code list for your API.
        <h3 id="translateurl">translateurl</h3>
        Set the endpoint to use for the <a href="#:translatepage">:translatepage</a> command. Only <a href="https://deepl.com">Deepl</a> and <a href="https://libretranslate.com/">LibreTranslate</a> are currently supported. Deepl have a different endpoint for the free and pro versions, by default is it set to the free API endpoint url. You can also set this to "https://libretranslate.com/" or "http://localhost:5000/" for a local LibreTranslate instance. Any url that does not include "deepl" is assumed to be LibreTranslate, unless the <a href="#translateapi">translateapi</a> setting is manually set. You must specify the base url of the api, so "https://api-free.deepl.com/v2" for Deepl Free, "https://api.deepl.com/v2" for Deepl Pro, "https://libretranslate.com" for paid hosted LibreTranslate and a local url such as "http://localhost:5000" if you host LibreTranslate yourself, although you can also choose to host LibreTranslate online and use that url.
        <h3 id="useragent">useragent</h3>
        With this option you can configure custom useragents to use all across Vieb. The value of this setting is a list of useragents, one of the agents will be randomly selected per tab before each new page loads. If the setting is empty, the default useragent is used. Useragents can make use of variables to add platform specific data to the string. For example: <span class="command-block">:set useragent=["Mozilla/5.0 (%sys) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/%version Safari/537.36"]</span> is the same as using an empty value for this setting. Though in this case, the setting can be appended with other useragents. Besides "%sys" (system platform info) and "%version" (Chromium version such as 100.0.0.0), you can also use "%fullversion" (Chromium version such as 100.0.4896.60) or "%firefoxversion" (such as 100.0) inside the useragent setting. Finally, you can also use the "%default" and "%firefox" variables to refer to the respective useragents in full. So to pick randomly between these two, use one of these commands:
        <span class="command-block">:set useragent=%default,%firefox</span>
        <span class="command-block">:set useragent=["%default", "%firefox"]</span>
        <span class="command-block">:set useragent=[["%default"], ["%firefox"]]</span>
        <span class="command-block">:set useragent={"%default": "", {"%firefox": ""}</span>
        The main advantage of using the Array or Object syntax is that you can use commas in the useragent, see <a href="#:set">:set</a> for details.
        <h3 id="userscript">userscript</h3>
        The userscript setting can be used to add custom JavaScript to any page you visit. This can be done using a wide ranges of different JS files, with four fixed locations and 2 global folders:
        <ul>
            <li>All JS files inside "&lt;datafolder&gt;/userscript/global/"</li>
            <li>A global file in the <a href="#datafolder">datafolder</a> at "&lt;datafolder&gt;/userscript/global.js"</li>
            <li>All JS files inside "~/.vieb/userscript/global/"</li>
            <li>A global file at "~/.vieb/userscript/global.js"</li>
            <li>A per-domain file in the <a href="#datafolder">datafolder</a> at "&lt;datafolder&gt;/userscript/&lt;domain&gt;.js"</li>
            <li>A per-domain file at "~/.vieb/userscript/&lt;domain&gt;.js"</li>
        </ul>
        They are applied in the listed order, with files in a folder being read in alphabetic order. These files can each contain all the JS code you want to add either to all sites with "global" configs, or to all sites of a specific domain, using the per-domain config files. This setting merely toggles if these userscript files should be read at all, which is by default not the case. Updating this setting will require you to reload the page manually, and turning it off will continue to run these scripts until you reload. The files are not watched, so editing these files will need a page reload. You can change which pages are affected by userscripts by changing <a href="#userscriptscope">userscriptscope</a>, which can also make it work for local files or <a href="#specialpages">special pages</a>. The domain name for files will be "file" and for special pages just "special" will be used. The term userscript was not merely chosen because these are scripts by the user, but because there is an existing system for making the scripts and loading them into other browsers with the same name. These scripts are usually run with extensions (like <a href="https://www.greasespot.net/">GreaseMonkey</a> or <a href="https://violentmonkey.github.io">ViolentMonkey</a>), but Vieb has built-in support for running them (though you need to manually install them to a different location). You can find these userscripts on sites like <a href="https://greasyfork.org/">greasyfork.org</a>. After downloading them, you need to make a js file in one of two locations for it to be run as a GreaseMonkey userscript:
        <ul>
            <li>All GreaseMonkey userscript JS files inside "&lt;datafolder&gt;/userscript/gm/"</li>
            <li>All GreaseMonkey userscript JS files inside "~/.vieb/userscript/gm/"</li>
        </ul>
        These files differ from regular JavaScript in that there is a header that specifies information about the script, but also that there is a broader API to use besides the regular browser API. In Vieb, most of these APIs are supported, with the major exceptions being: resources, external requires, registering menu commands and downloading files. Unlike regular JS files that you can run per domain or globally, these GreaseMonkey userscripts define which pages they run on inside the file header, and as such are not affected by <a href="#userscriptscope">userscriptscope</a>. It's recommend to observe the source code manually for all scripts you install or include into Vieb, as these scripts get full access to any page if userscript is enabled. For more information about the API and these type of userscripts, see <a href="https://en.wikipedia.org/wiki/Userscript">wikipedia</a> and <a href="https://violentmonkey.github.io/api/gm/">the ViolentMonkey docs</a>.
        <h3 id="userscriptscope">userscriptscope</h3>
        Controls which pages should be affected by <a href="#userscript">userscript</a>. By default, only external sites will use userscript if you enable it, using "page" in the list. If you want to have userscript on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means userscript will load on all pages you visit (if enabled at all with <a href="#userscript">userscript</a>).
        <h3 id="userstyle">userstyle</h3>
        The userstyle setting can be used to add custom CSS to any page you visit. Unlike with <a href="#:colorscheme">colorscheme</a> which is used for Vieb's interface and the <a href="#specialpages">special pages</a>, userstyle is by default used on other pages and websites. This can be done using a wide ranges of different CSS files, with four fixed locations and 2 global folders:
        <ul>
            <li>All CSS files inside "&lt;datafolder&gt;/userstyle/global/"</li>
            <li>A global file in the <a href="#datafolder">datafolder</a> at "&lt;datafolder&gt;/userstyle/global.css"</li>
            <li>All CSS files inside "~/.vieb/userstyle/global/"</li>
            <li>A global file at "~/.vieb/userstyle/global.css"</li>
            <li>A per-domain file in the <a href="#datafolder">datafolder</a> at "&lt;datafolder&gt;/userstyle/&lt;domain&gt;.css"</li>
            <li>A per-domain file at "~/.vieb/userstyle/&lt;domain&gt;.css"</li>
        </ul>
        They are applied in the listed order, with files in a folder being read in alphabetic order. These files can each contain all the CSS rules you want to add either to all sites with "global" configs, or to all sites of a specific domain, using the per-domain config files. This setting merely toggles if these userstyle files should be read at all, which is by default not the case. Updating this setting will reload the userstyles across all pages automatically, no need to reload the page yourself. The files are not watched, so editing these files without updating this setting will need a page reload, or you can do <span class="command-block">:set userstyle</span> at anytime to refresh them. You can change which pages are affected by userstyle by changing <a href="#userstylescope">userstylescope</a>, which can also make it work for local files or <a href="#specialpages">special pages</a>. The domain name for files will be "file" and for special pages just "special" will be used. Userstyle can be used for much more than just colors, you can control scroll behavior with <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior">scroll-behavior CSS rules</a>, or hide the scrollbar by adding "::-webkit-scrollbar {display: none;}" to any of the files above. This particular example can also be automatically added to pages with the <a href="#guiscrollbar">guiscrollbar</a> setting, without requiring you to have enabled userstyle. In addition to creating custom userstyle CSS files, you could also make sure that <a href="#nativetheme">nativetheme</a> is reporting the correct theme to pages.
        <h3 id="userstylescope">userstylescope</h3>
        Controls which pages should be affected by <a href="#userstyle">userstyle</a>. By default, only external sites will use userstyle if you enable it, using "page" in the list. If you want to have userstyle on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means userstyle will load on all pages you visit (if enabled at all with <a href="#userstyle">userstyle</a>).
        <h3 id="vimcommand">vimcommand</h3>
        With this setting, you can configure the command that will be used as the editor when invoking <a href="#action.editWithVim">action.editWithVim</a>. You can use it to edit input fields or textareas with any external editor. For compatibility across systems, this setting is by default set to "gvim". You can change it to use the terminal version of Vim, for example with gnome-terminal: <span class="command-block nowrap">set vimcommand="gnome-terminal -- vim"</span>. This setting can be set to any command, including an external prose/spellchecker, as long as it accepts a filename as an argument. The input field will be automatically updated based on any changes made to the file. By default, you will only be notified if the command fails, see <a href="#notificationforsystemcommands">notificationforsystemcommands</a> for details. To change the shell this and other commands will use, see the <a href="#shell">shell</a> setting.
        <h3 id="windowfullscreen">windowfullscreen</h3>
        Using this you can control the fullscreen state of the window on startup. By default, the window is not fullscreen, unless it was closed in a fullscreen state, which is then restored on subsequent startups. To always open in a fullscreen state regardless of the previous state, set to "true" or "false" instead of the default "restore".
        <h3 id="windowmaximize">windowmaximize</h3>
        Using this you can control the maximization state of the window on startup. By default, the window is not maximized, unless it was closed in a maximized state, which is then restored on subsequent startups. To always open in a maximized state regardless of the previous state, set to "true" or "false" instead of the default "restore".
        <h3 id="windowposition">windowposition</h3>
        Using this you can control the position of the window on startup. By default, the window is positioned in the center, unless it was closed in different position, which is then restored on subsequent startups. To always open in the center, set the value to "default" instead of the default "restore" value. You can also set this value to a fixed position, meaning that the window will always be positioned on startup at that custom position. For example, to open at the topleft of the window, use "0x0". To open at x 400 and y 300, use "400x300" as the value.
        <h3 id="windowsize">windowsize</h3>
        Using this you can control the size of the window on startup. By default, the window is sized 800 by 600, unless is was closed with a different size, which is then restored on subsequent startups. To always open with this default size, set the value to "default" instead of the default "restore" value. You can also set this value to a fixed size, meaning that the window will always be sized on startup with those custom dimensions. For example, to open with a window size of 500 by 500 (which is the minimum size), use "500x500". To open with a width of 800 and a height of 600, use "800x600".
        <h3 id="windowtitle">windowtitle</h3>
        The windowtitle setting can be used to change Vieb's window title to whatever you want. The title can be set to any string, optionally filled in with the page url, page title, app name and app version. You can do this by using any of these variables inside your string: "%url", "%title", "%app" or "%version". Even though Vieb does not show the window title by default (unless you use the --window-frame option), it can for example be used to connect to external password managers and can also be seen when listing open applications on your computer (usually with Alt-Tab or similar).
        <h1 id="actions">Actions</h1>
        Actions refer to built-in Vieb functionally that can be executed when you press the right keys. The keys you need to press for an action to execute are listed just below action name. These keys are updated dynamically based on your changes with the <a href="#:map">:map</a> command. Some actions can be repeated x amount of times, by typing a number before pressing the right keys. These type of actions are marked the "countable" badge. This behavior is only present in <a class="normal" href="#normal">normal mode</a>, <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a>. Action names are case-insensitive when part of mappings and will be corrected to their proper name when you don't include the right casing yourself. For regular actions, it's also possible to omit the <span class="command-block">action.</span> prefix when using any kind of command or mapping. Finally, you can replace the <span class="command-block">pointer.</span> or <span class="command-block">action.</span> prefix with the shorter <span class="command-block">p.</span> and <span class="command-block">a.</span>. It's always required to wrap the action between <span class="command-block">&lt;&gt;</span> characters. For example, <a href="#action.toNormalMode">action.toNormalMode</a> can be written in any of the following ways when creating a mapping:
        <div class="command-block">&lt;action.toNormalMode&gt;<br />&lt;a.toNORMALmode&gt;<br />&lt;tonormalmode&gt;<br /></div>
        You can always distinguish this from commands, because those are always prefixed with ":" when they are invoked with this syntax.
        <h2 id="normal">Normal mode</h2>
        <a class="normal" href="#normal">Normal mode</a> is the main and default mode of Vieb and Vim, where most of the actions are mapped by default. Since it serves no special function, the entire keyboard can be used to do all kinds of different actions. There are no actions specific to <a class="normal" href="#normal">normal mode</a>, but almost all actions not listed under other modes can be used in it. You can conditionally send keys to the page from <a class="normal" href="#normal">normal mode</a> by configuring <a href="#passthroughkeys">passthroughkeys</a>.
        <h3 id="action.toNormalMode">action.toNormalMode</h3>
        Switch back to <a class="normal" href="#normal">normal mode</a>. Similar to other mode switch actions, it has no effect when the mode is already the current one. Normal mode is the only mode without a dedicated special function, which is precisely why it's the default mode. From this mode, you have the option to move to most other modes, but also execute a lot of single key actions. For the full list of options, go to <a class="command" href="#command">command mode</a> and execute <span class="command-block">:nmap!</span>. This will list all <a class="normal" href="#normal">normal mode</a> <a href="#mappings">mappings</a> including defaults.
        <h2 id="command">Command mode</h2>
        In <a class="command" href="#command">command mode</a> you can enter commands to execute at runtime. See the <a href="#commands">commands</a> chapter for more details.
        <h3 id="action.toCommandMode">action.toCommandMode</h3>
        Switch to <a class="command" href="#command">command mode</a>. After entering a command while in <a class="command" href="#command">command mode</a>, call <a href="#action.useEnteredData">action.useEnteredData</a> to execute the command, or switch to any other mode to cancel. See <a href="#commands">commands</a> for a list of commands</a>. See <a href="#suggestcommands">suggestcommands</a> to configure the number of suggestions shown, which you can switch to using <a href="#action.nextSuggestion">action.nextSuggestion</a> and <a href="#action.prevSuggestion">action.prevSuggestion</a>. You can also view previously executed commands with <a href="#action.commandHistoryNext">action.commandHistoryNext</a> and <a href="#action.commandHistoryPrevious">action.commandHistoryPrevious</a>, which you can configure using <a href="#commandhist">commandhist</a>.
        <h3 id="action.commandHistoryPrevious">action.commandHistoryPrevious</h3>
        Go back to previously executed commands of this session, by calling this action. Unlike the suggestions, these actions do not wrap back to the first or last when the end of the history is reached. Opposite of <a href="#action.commandHistoryNext">action.commandHistoryNext</a>. This action has no function outside of <a class="command" href="#command">command mode</a>. You can change which commands are stored in the history using <a href="#commandhist">commandhist</a>.
        <h3 id="action.commandHistoryNext">action.commandHistoryNext</h3>
        Go forward in history when viewing a previously executed command. If there are no more historic commands, it will restore the text that was typed before going back in history. Opposite of <a href="#action.commandHistoryPrevious">action.commandHistoryPrevious</a>. This action has no function outside of <a class="command" href="#command">command mode</a>. You can change which commands are stored in the history using <a href="#commandhist">commandhist</a>.
        <h2 id="explore">Explore mode</h2>
        In <a class="explore" href="#explore">explore mode</a> you can enter a new location to navigate to.
        <h3 id="action.toExploreMode">action.toExploreMode</h3>
        Switch to <a class="explore" href="#explore">explore mode</a>, which can be used to navigate to websites or search using the <a href="#searchengine">searchengine</a> setting. After entering a url or search while in <a class="explore" href="#explore">explore mode</a>, call <a href="#action.useEnteredData">action.useEnteredData</a> to navigate to the entered url or search, or switch to any other mode to cancel. You can change the suggestions with the <a href="#suggestorder">suggestorder</a> setting. The bar will color depending on your entered data:
        <ul>
            <li><span class="url-url">url</span> - This will appear when entering a valid url, which will result in direct navigation to it</li>
            <li><span class="url-file">file</span> - This will appear when a local file path is entered, which will result in a local directory exploration or a textual representation of the file</li>
            <li><span class="url-search">searching</span> - This will appear when the entered data is not a url or a local file, which will result in a search being done based on the <a href="#searchengine">searchengine</a> setting</li>
            <li><span class="url-suggest">suggestion</span> - This will appear when you have selected a suggestion from the list, which will result in direct navigation to the selected suggestion</li>
            <li><span class="url-searchwords">searchwords</span> - This appears when you have configured <a href="#searchwords">searchwords</a> and one of them will activate</li>
        </ul>
        You can switch to previous navigations using <a href="#action.exploreHistoryPrevious">action.exploreHistoryPrevious</a> and <a href="#action.exploreHistoryNext">action.exploreHistoryNext</a>, which you can configure with the <a href="#explorehist">explorehist</a> setting. Finally, it's possible to use the suggestions with <a href="#action.nextSuggestion">action.nextSuggestion</a>, <a href="#action.nextSuggestionSection">action.nextSuggestionSection</a>, <a href="#action.prevSuggestion">action.prevSuggestion</a> and <a href="#action.prevSuggestionSection">action.prevSuggestionSection</a>, which you can control with the <a href="#suggestorder">suggestorder</a> setting.
        <h3 id="action.nextSuggestion">action.nextSuggestion</h3>
        Move to the next suggestion shown while in <a class="explore" href="#explore">explore mode</a> or <a class="command" href="#command">command mode</a>. If no suggestion is selected yet, this action will select the first suggestion. If this action is called while the last suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. Opposite of <a href="#action.prevSuggestion">action.prevSuggestion</a>.
        <h3 id="action.prevSuggestion">action.prevSuggestion</h3>
        Move to the previous suggestion shown while in <a class="explore" href="#explore">explore mode</a> or <a class="command" href="#command">command mode</a>. If no suggestion is selected yet, this action will select the last suggestion. If this action is called while the first suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. Opposite of <a href="#action.nextSuggestion">action.nextSuggestion</a>.
        <h3 id="action.nextSuggestionSection">action.nextSuggestionSection</h3>
        Move to the next suggestion section shown while in <a class="explore" href="#explore">explore mode</a>. It will select the first entry of a specific type in the results, in other words, move between sections. If no suggestion is selected yet, this action will select the first suggestion. If this action is called while the last suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. You can customize which different type of suggestions should appear with <a href="#suggestorder">suggestorder</a>. Opposite of <a href="#action.prevSuggestionSection">action.prevSuggestionSection</a>.
        <h3 id="action.prevSuggestionSection">action.prevSuggestionSection</h3>
        Move to the previous suggestion section shown while in <a class="explore" href="#explore">explore mode</a>. It will select the first entry of a specific type in the results. If already in the last section, you will move back to the original text. Opposite of <a href="#action.nextSuggestionSection">action.nextSuggestionSection</a>.
        <h3 id="action.exploreHistoryPrevious">action.exploreHistoryPrevious</h3>
        Go back to previously navigated website of this session, by calling this action. It is different from <a href="#action.reopenTab">action.reopenTab</a>, because this will store the sites you explicitly navigated to, instead of only the pages you closed, which can be different if you navigated in a tab or if you opened it without <a class="explore" href="#explore">explore mode</a>. Unlike <a href="#suggestorder">suggestorder</a>, these actions do not wrap back to the first or last when the end of the history is reached. Opposite of <a href="#action.exploreHistoryNext">action.exploreHistoryNext</a>. This action has no function outside of <a class="explore" href="#explore">explore mode</a>. You can change which navigations are stored in the history using <a href="#explorehist">explorehist</a>.
        <h3 id="action.exploreHistoryNext">action.exploreHistoryNext</h3>
        Go forward in history when viewing previously navigated websites. If there are no more historic sites, it will restore the text that was typed before going back in history. Opposite of <a href="#action.exploreHistoryPrevious">action.exploreHistoryPrevious</a>. This action has no function outside of <a class="explore" href="#explore">explore mode</a>. You can change which navigations are stored in the history using <a href="#explorehist">explorehist</a>.
        <h3 id="action.useEnteredData">action.useEnteredData</h3>
        After entering a search, command or url, use this action to use the entered data. For <a class="explore" href="#explore">explore mode</a>, this will navigate to the page provided, or append the entered text to the <a href="#searchengine">searchengine</a> setting. For <a class="command" href="#command">command mode</a>, the command will be executed. For <a class="search" href="#search">search mode</a>, the entered string will be searched for on the current page and matches will be highlighted. This action will always go back the <a class="normal" href="#normal">normal mode</a> after it's done. If this action is called from <a class="explore" href="#explore">explore mode</a>, the resulting url will be stored for recovery using <a href="#action.exploreHistoryPrevious">action.exploreHistoryPrevious</a>. The same is done for commands using <a href="#action.commandHistoryPrevious">action.commandHistoryPrevious</a>.
        <h2 id="search">Search mode</h2>
        The <a class="search" href="#search">search mode</a> is for finding text in the page.
        <h3 id="action.toSearchMode">action.toSearchMode</h3>
        Switch to <a class="search" href="#search">search mode</a>, which can be used to search for any string (patterns are not supported). By default, searches are case-insensitive when lowercase, and case sensitive when they contain any capital letter, see the <a href="#smartcase">smartcase</a> setting for details. When you turn that off, you can control case sensitivity directly with <a href="#ignorecase">ignorecase</a>. After entering a search string while in <a class="search" href="#search">search mode</a>, call <a href="#action.useEnteredData">action.useEnteredData</a> to start the search, or switch to any other mode to cancel. If you actually apply a search, it will remember search order, which can be made backwards if you start search mode with a shifted or ctrl modified key (by default "?"). You can reset the search order by using unshifted keys to open the mode and do a search. Subsequent searches of the same string will find the next match. If the <a href="#incsearch">incsearch</a> setting is enabled, the search is performed incrementally while typing. When back in <a class="normal" href="#normal">normal mode</a>, use <a href="#action.nextSearchMatch">action.nextSearchMatch</a> and <a href="#action.previousSearchMatch">action.previousSearchMatch</a> to navigate between matches. See also <a href="#action.clickOnSearch">action.clickOnSearch</a>, <a href="#:nohlsearch">:nohlsearch</a>, <a href="#searchpointeralignment">searchpointeralignment</a>, <a href="#searchreach">searchreach</a>, <a href="#searchreachinc">searchreachinc</a> and <a href="#action.emptySearch">action.emptySearch</a>.
        <h3 id="action.emptySearch">action.emptySearch</h3>
        After searching for a string, you can call this action to clear the current search and remove the highlighting. This action is called when you supply an empty search. Unlike vim, this action will not remember previous searches, also see the <a href="#:nohlsearch">:nohlsearch</a> command.
        <h3 id="action.clickOnSearch">action.clickOnSearch</h3>
        After searching for a string, call this action to execute a simulated mouse click at the current match. You can navigate to other matches with <a href="#action.nextSearchMatch">action.nextSearchMatch</a> and <a href="#action.previousSearchMatch">action.previousSearchMatch</a>.
        <h3 id="action.nextSearchMatch">action.nextSearchMatch</h3>
        After searching for a string with <a class="search" href="#search">search mode</a>, use this action to move the focus to the next search match. If the last match is reached and this action is called, the first one will be shown (it will wrap). You can disable the highlighting with <a href="#:nohlsearch">:nohlsearch</a> or remove the search completely with <a href="#action.emptySearch">action.emptySearch</a>. The opposite <a href="#action.previousSearchMatch">action.previousSearchMatch</a> can be switched around if you started <a class="search" href="#search">search mode</a> was started in backwards mode with a shifted key such as "?". When this action is called from <a class="pointer" href="#pointer">pointer mode</a>, the pointer will move to the next search match. You can configure where exactly inside the highlighted area the pointer should jump to with <a href="#searchpointeralignment">searchpointeralignment</a>, which by default aligns to the left. This action is not recommended from <a class="visual" href="#visual">visual mode</a> however, as the search highlighting will conflict with the <a class="visual" href="#visual">visual mode</a> selection.
        <h3 id="action.previousSearchMatch">action.previousSearchMatch</h3>
        Opposite of <a href="#action.nextSearchMatch">action.nextSearchMatch</a>. Can also search forward if backwards searching was done by starting <a class="search" href="#search">search mode</a> with a shifted key such as "?".
        <h2 id="insert">Insert mode</h2>
        With <a class="insert" href="#insert">insert mode</a> you get back all regular webpage interaction, mostly for typing text. Is also used to bring focus to the page, make certain hover elements work and to use website shortcuts. As an alternative to switching to <a class="insert" href="#insert">insert mode</a> to press a single character, you could conditionally send keys to the page from <a class="normal" href="#normal">normal mode</a> by configuring <a href="#passthroughkeys">passthroughkeys</a>.
        <h3 id="action.toInsertMode">action.toInsertMode</h3>
        Switch to <a class="insert" href="#insert">insert mode</a>. This will allow keyboard input to be redirected to the website. Keys that are mapped to actions won't be registered by the website, such as Escape by default, see <a href="#Nop">Nop</a> for details about controlling side effects. To disable mouse interaction inside of <a class="insert" href="#insert">insert mode</a>, see the "pageininsert" feature of the <a href="#mouse">mouse</a> setting, similarly you can also disable the page interaction outside of insert using <span class="command-block">:set mouse-=pageoutsideinsert</span>. <a class="insert" href="#insert">insert mode</a> will automatically be entered when an input field is picked in <a class="follow" href="#follow">follow mode</a>. By default mouse clicks and selections on input fields will also move you to <a class="insert" href="#insert">insert mode</a>, which can be controlled with the "toinsert" feature of the <a href="#mouse">mouse</a> setting. When typing inside <a class="insert" href="#insert">insert mode</a>, useful action are <a href="#action.menuOpen">action.menuOpen</a> and <a href="#action.editWithVim">action.editWithVim</a>. If you want to leave <a class="insert" href="#insert">insert mode</a> with a key and also send it to the page before leaving, you can so something like this: <span class="command-block">:inoremap &lt;CR&gt; &lt;CR&gt;&lt;toNormalMode&gt;</span>. To automatically leave insert mode when not entering keys for a while, see <a href="#insertleavetimeout">insertleavetimeout</a>.
        <h3 id="action.insertAtFirstInput">action.insertAtFirstInput</h3>
        This action will enter <a class="insert" href="#insert">insert mode</a> and focus the first input field on the page. Usually this will be a search field or dropdown. If no input fields are currently visible, this action will not enter <a class="insert" href="#insert">insert mode</a>.
        <h3 id="action.editWithVim">action.editWithVim</h3>
        Open an external editor based on the currently focused input field or the navbar. This action is supposed to be called while in <a class="insert" href="#insert">insert mode</a>, but it can also be called from typing modes that use the navbar: <a class="explore" href="#explore">explore mode</a>, <a class="search" href="#search">search mode</a> and <a class="command" href="#command">command mode</a>. The editor that will be opened is configured by the <a href="#vimcommand">vimcommand</a> setting, and can also be set to a different editor if you would like to. The input fields on the page can even be updated by saving the file long after you have left <a class="insert" href="#insert">insert mode</a>, as long as the page isn't reloaded and the input field is there. The navbar can be updated by saving the file as long as you are in one the three modes that accept user typed text mentioned above. The filename is a combination of the current date as a timestamp and the domain name if available.
        <h3 id="action.pasteText">action.pasteText</h3>
        Paste text from the clipboard into an input field or textarea. By default unmapped, as the main use is inside custom mappings. Unrelated to the default system paste, but mimics system paste behavior for input and textarea elements on the page programmatically. For copying text, see the <a class="visual" href="#visual">visual mode</a> specific <a href="#pointer.copyText">pointer.copyText</a>. This action is supposed to be called while in <a class="insert" href="#insert">insert mode</a>, but it can also be called from typing modes that use the navbar: <a class="explore" href="#explore">explore mode</a>, <a class="search" href="#search">search mode</a> and <a class="command" href="#command">command mode</a>.
        <h2 id="follow">Follow mode</h2>
        With <a class="follow" href="#follow">follow mode</a> you can click on elements on the page, or move the <a class="pointer" href="#pointer">pointer</a> to a specific element on the page. It will highlight a range of different elements, which depend on the way it's started and on which elements you have enabled with <a href="#followelement">followelement</a> and <a href="#followelementpointer">followelementpointer</a>. All elements will be given a set of characters that you can type out to select it. Which characters are used to select elements is controlled by <a href="#followchars">followchars</a>. If a character is not used to select elements it will by default be used to filter/search elements on the page based on text or url, but this can be changed using <a href="#followfallbackaction">followfallbackaction</a>. You can also change the position of the character label using <a href="#followlabelposition">followlabelposition</a>. In the next paragraphs the different types of <a class="follow" href="#follow">follow mode</a> are explained.
        <h3 id="action.startFollowCurrentTab">action.startFollowCurrentTab</h3>
        Switch to <a class="follow" href="#follow">follow mode</a> and start highlighting clickable elements. This version of <a class="follow" href="#follow">follow mode</a> will execute a mouse click on the element once picked. See <a href="#action.startFollowNewTab">action.startFollowNewTab</a> to open links in a new tab, or <a href="#action.startFollowNewSplit">action.startFollowNewSplit</a> and <a href="#action.startFollowNewVerSplit">action.startFollowNewVerSplit</a> to open them in new splits. For regular follow mode, to remain in <a class="follow" href="#follow">follow mode</a> after clicking on a link, hold Shift while pressing the appropriate key. While in <a class="follow" href="#follow">follow mode</a>, all clickable elements will be assigned a key (and sometimes two) that you can press to click on that element. You don't need to hold Shift, unless you want to stay in <a class="follow" href="#follow">follow mode</a> after clicking it. It is also possible to start <a class="follow" href="#follow">follow mode</a> from a different mode than <a class="normal" href="#normal">normal mode</a>, such as <a class="pointer" href="#pointer">pointer mode</a> or <a class="visual" href="#visual">visual mode</a>, in which case the pointer will be moved to the location of the element you picked. These are the different type of elements that will be detected:
        <ul>
            <li><span class="follow-inputs-insert">Text related input elements</span> - Any input element that requires subsequent interaction, such as textareas, dropdowns or regular text input fields. When <a class="follow" href="#follow">follow mode</a> was activated from <a class="normal" href="#normal">normal mode</a> and one of these elements is selected, you will automatically switch to <a class="insert" href="#insert">insert mode</a> focused on the input field.</span></li>
            <li><span class="follow-inputs-click">Clickable input elements</span> - Any input element that is usually clicked on, such as checkboxes, (radio-)buttons and labels.</li>
            <li><span class="follow-onclick">Clickable elements</span> - Any element that was made clickable with a JavaScript event listener or similar.</li>
            <li><span class="follow-url">Links</span> - Any anchor tag on the page will be used to navigate to it in the current tab, or clicked on if it doesn't have a link. Most of the time this will navigate you to the linked page.</li>
            <li><span class="follow-media">Media</span> - Any video or audio element on the page. Clicking them usually toggles pause, but you can do much more if you move the <a class="pointer" href="#pointer">pointer</a> to such an element and then use a <a href="#link-related">link related action</a>.</li>
            <li><span class="follow-image">Images</span> - Any image, svg or background image on the page. Clicking these elements usually doesn't do much, but simlar to the media elements, you can hover over them with <a class="pointer" href="#pointer">pointer mode</a> and then run actions on the image.</li>
            <li><span class="follow-other">Elements with other types of mouse interaction</span> - These type of elements do not appear clickable by regular means, but they do have other mouse action listeners, such as a hover, drag action or similar. This type of element is mostly useful when <a class="follow" href="#follow">follow mode</a> is entered from <a class="pointer" href="#pointer">pointer mode</a> or <a class="visual" href="#visual">visual mode</a> instead of from <a class="normal" href="#normal">normal mode</a>, as instead of clicking on it, the pointer will move to the selected element, which will then hover over it. In other words, it can be used to quickly move the pointer to a specific position on the screen by combining these modes.</li>
        </ul>
        By default they will appear in this order listed, but you can reorder them with <a href="#action.reorderFollowLinks">action.reorderFollowLinks</a>. The elements this action will highlight can be filtered using the <a href="#followelement">followelement</a> setting. You can do this separately for <a class="pointer" href="#pointer">pointer mode</a> using <a href="#followelementpointer">followelementpointer</a>.
        <h3 id="action.startFollowNewTab">action.startFollowNewTab</h3>
        Switch to <a class="follow" href="#follow">follow mode</a> and start highlighting links with valid urls. This version of <a class="follow" href="#follow">follow mode</a> will open the url of the link in a new tab once picked. Use <a href="#follownewtabswitch">follownewtabswitch</a> to configure if Vieb should switch to the newly opened tab. To stay in <a class="follow" href="#follow">follow mode</a> and prevent switching to the newly opened tab, hold Shift while picking the appropriate key, which will allow multiple tabs to be opened before switching to them or leaving <a class="follow" href="#follow">follow mode</a>. The setting only changes the behavior when not holding Shift. For the regular follow mode, see <a href="#action.startFollowCurrentTab">action.startFollowCurrentTab</a> to click on any clickable element on the current page.
        <h3 id="action.startFollowNewSplit">action.startFollowNewSplit</h3>
        Switch to <a class="follow" href="#follow">follow mode</a> and start highlighting links with valid urls. This version of <a class="follow" href="#follow">follow mode</a> will open the url of the link in a new horizontal split once picked. You will always switch to the new split, and won't be able to remain in <a class="follow" href="#follow">follow mode</a> even if you hold Shift. Settings like <a href="#containersplitpage">containersplitpage</a> and <a href="#splitbelow">splitbelow</a> apply like you would expect. You can also <a href="#action.startFollowNewVerSplit">action.startFollowNewVerSplit</a> to open vertical splits instead of horizontal ones.
        <h3 id="action.startFollowNewVerSplit">action.startFollowNewVerSplit</h3>
        Similar to the other split version of <a class="follow" href="#follow">follow mode</a> <a href="#action.startFollowNewSplit">action.startFollowNewSplit</a>, but uses vertical splits instead of horizontal ones. As expected, this means that the related settings are <a href="#splitright">splitright</a> and <a href="#containersplitpage">containersplitpage</a>.
        <h3 id="action.startFollowCopyLink">action.startFollowCopyLink</h3>
        Switch to <a class="follow" href="#follow">follow mode</a> and start highlighting clickable elements. This version of <a class="follow" href="#follow">follow mode</a> will copy link of the selected element.
        <h3 id="action.stopFollowMode">action.stopFollowMode</h3>
        Stop <a class="follow" href="#follow">follow mode</a> and go back to the previously active mode, which is not always <a class="normal" href="#normal">normal mode</a>. This is one of the actions that is automatically called after you have picked a link in <a class="follow" href="#follow">follow mode</a>, unless you held Shift in the regular or new tab version of <a class="follow" href="#follow">follow mode</a>.
        <h3 id="action.reorderFollowLinks">action.reorderFollowLinks</h3>
        With this action, the different type of <a class="follow" href="#follow">follow mode</a> elements will be reordered based on type. You can keep executing this action to keep cycling the order. For example, links are by default shown above input elements, but this action can reorder them to be shown below them. The six main types are cycled with this action, elements in the "other" category are always shown below the main six types.
        <h2 id="scrolling">Scrolling</h2>
        These actions are related to scrolling. There are two different methods to scroll the page in Vieb:
        <ul>
            <li>Window - Scroll the entire page using regular actions, if the page is scrollable</li>
            <li>Pointer - Execute a mouse wheel scroll at a specific position</li>
        </ul>
        The second category of scroll actions are prefixed with "pointer." instead of "action.", because they are used in combination with <a class="pointer" href="#pointer">pointer mode</a>. It's entirely possible to call these pointer actions outside of <a class="pointer" href="#pointer">pointer mode</a> or <a class="visual" href="#visual">visual mode</a>, but the actions are still executed at the pointer location, even if it's not visible. Another difference between these different scroll methods, is that only the <a class="pointer" href="#pointer">pointer mode</a> actions have smooth scrolling. You can also control smooth scrolling on pages by adding <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior">scroll-behavior CSS rules</a> to your own custom <a href="#userstyle">userstyle</a>. For the pointer scroll actions, see the <a class="pointer" href="#pointer">pointer mode</a> paragraph. Below are all the regular scrolling actions, which will scroll the entire page if possible.
        <h3 id="action.scrollTop">action.scrollTop</h3>
        Scroll to the absolute top of the page. If given a count, it will scroll to a percentage of the page instead, for example: "25gg" will scroll to 25% of the page, similar to jumping to lines in Vim. A count above or equal to 100 will scroll to the bottom of the page.
        <h3 id="action.scrollBottom">action.scrollBottom</h3>
        Scroll to the absolute bottom of the page. If given a count, it will scroll to a percentage of the page instead, for example: "75G" will scroll to 75% of the page, similar to jumping to lines in Vim. A count above or equal to 100 will scroll to the bottom of the page.
        <h3 id="action.scrollRightMax">action.scrollRightMax</h3>
        Scroll to the absolute right of the page.
        <h3 id="action.scrollLeftMax">action.scrollLeftMax</h3>
        Scroll to the absolute left of the page.
        <h3 id="action.scrollUp">action.scrollUp</h3>
        Scroll 100 pixels up.
        <h3 id="action.scrollDown">action.scrollDown</h3>
        Scroll 100 pixels down.
        <h3 id="action.scrollLeft">action.scrollLeft</h3>
        Scroll 100 pixels to the left.
        <h3 id="action.scrollRight">action.scrollRight</h3>
        Scroll 100 pixels to the right.
        <h3 id="action.scrollPageUp">action.scrollPageUp</h3>
        Scroll an entire page up, equal to the window height minus a margin.
        <h3 id="action.scrollPageDown">action.scrollPageDown</h3>
        Scroll an entire page down, equal to the window height minus a margin.
        <h3 id="action.scrollPageLeft">action.scrollPageLeft</h3>
        Scroll an entire page to the left, equal to the window width minus a margin.
        <h3 id="action.scrollPageRight">action.scrollPageRight</h3>
        Scroll an entire page to the right, equal to the window width minus a margin.
        <h3 id="action.scrollPageUpHalf">action.scrollPageUpHalf</h3>
        Scroll half of a page up, equal to half the window height minus a small margin.
        <h3 id="action.scrollPageDownHalf">action.scrollPageDownHalf</h3>
        Scroll half of a page down, equal to half the window height minus a small margin.
        <h2 id="navigation">Navigation</h2>
        These actions are related to navigation, such as refreshing or managing tabs.
        <h3 id="action.refreshTab">action.refreshTab</h3>
        Reload the current tab by refreshing the page. If cache is not disabled with the <a href="#cache">cache</a> setting, this type of refresh will attempt to load most things from cache. See <a href="#action.refreshTabWithoutCache">action.refreshTabWithoutCache</a> to refresh without caching. If caching is disabled by the cache setting, the two actions are identical. This action can also be used to recreate a crashed tab.
        <h3 id="action.refreshTabWithoutCache">action.refreshTabWithoutCache</h3>
        Reload the current tab by refreshing the page without using the cache. This action is identical to <a href="#action.refreshTab">action.refreshTab</a> if the <a href="#cache">cache</a> setting is set to 'none'. This action can also be used to recreate a crashed tab.
        <h3 id="action.stopLoadingPage">action.stopLoadingPage</h3>
        Stop loading the current page. This has effect on all active requests for the current tab, but does not prevent the page from making subsequent fetch or xhttp requests. Other tabs are also unaffected.
        <h3 id="action.openNewTabWithCurrentUrl">action.openNewTabWithCurrentUrl</h3>
        Open a new tab with the newtab page, after which you will enter <a class="explore" href="#explore">explore mode</a> with the url of the current page pre-filled. This can be used to quickly open another page with a similar url, that is not linked on the current page. Another advantage is that this action will not use the system clipboard to copy the url.
        <h3 id="action.openFromClipboard">action.openFromClipboard</h3>
        Navigate to the page that is currently stored on the clipboard. The current tab will be used for the navigation, unless you open a new tab first (see the default mapping for that). The navigation follows the same logic as regular navigation from <a class="explore" href="#explore">explore mode</a>, which means that text that is not a url will be searched with the <a href="#searchengine">searchengine</a> setting. It's also possible to copy the url of the current page to the clipboard with <a href="#action.pageToClipboard">action.pageToClipboard</a>.
        <h3 id="action.reopenTab">action.reopenTab</h3>
        Reopen a previously closed tab as a new tab. Can be toggled with <a href="#keeprecentlyclosed">keeprecentlyclosed</a>. Opposite of <a href="#:close">:close</a>. You can change the position of the reopened tab with <a href="#tabreopenposition">tabreopenposition</a>.
        <h3 id="action.nextTab">action.nextTab</h3>
        Navigate to the next tab (to the right) in the tabbar. You can wrap back to the first tab if <a href="#tabcycle">tabcycle</a> is not disabled. Opposite of <a href="#action.previousTab">action.previousTab</a>.
        <h3 id="action.previousTab">action.previousTab</h3>
        Navigate to the previous tab (to the left) in the tabbar. Opposite of <a href="#action.nextTab">action.nextTab</a>.
        <h3 id="action.moveTabForward">action.moveTabForward</h3>
        Move the current tab forward in the tabbar (to the right). This action does not switch between pages, but merely changes the order of appearance in the tabbar. This action will not cross the separation between <a href="#:pin">pinned</a> and regular tabs. Opposite of <a href="#action.moveTabBackward">action.moveTabBackward</a>. See <a href="#action.nextTab">action.nextTab</a> to actually switch between the tabs.
        <h3 id="action.moveTabBackward">action.moveTabBackward</h3>
        Move the current tab backward in the tabbar (to the left). Opposite of <a href="#action.moveTabForward">action.moveTabForward</a>.
        <h3 id="action.moveTabEnd">action.moveTabEnd</h3>
        Move the current tab forward to the end of the tabbar (to the right), or make it the most right pinned tab (if already pinned). This action does not switch between pages, but merely changes the order of appearance in the tabbar. For moving just a single spot to the right, see <a href="#action.moveTabBackward">action.moveTabBackward</a>.
        <h3 id="action.moveTabStart">action.moveTabStart</h3>
        Move the current tab backward in the end of the tabbar (to the left). Opposite of <a href="#action.moveTabEnd">action.moveTabEnd</a>.
        <h3 id="action.backInHistory">action.backInHistory</h3>
        Navigate to the previous page you visited in the current tab. The first page of the tab history will always be the newtab page. Opposite of <a href="#action.forwardInHistory">action.forwardInHistory</a>.
        <h3 id="action.forwardInHistory">action.forwardInHistory</h3>
        Opposite of <a href="#action.backInHistory">action.backInHistory</a>.
        <h3 id="action.zoomReset">action.zoomReset</h3>
        Reset the zoom percentage of the current page to the default level of 100%. The zoom percentage is remembered across sessions per domain. See <a href="#action.zoomIn">action.zoomIn</a> and <a href="#action.zoomOut">action.zoomOut</a> to change the zoom percentage.
        <h3 id="action.zoomIn">action.zoomIn</h3>
        Increase the zoom percentage. The zoom percentage is increased by 10% every time this action is called, up to a maximum of 500%. Opposite of <a href="#action.zoomOut">action.zoomOut</a>. Use <a href="#action.zoomReset">action.zoomReset</a> to go back to 100%.
        <h3 id="action.zoomOut">action.zoomOut</h3>
        Decrease the zoom percentage. The zoom percentage is decreased by 10% every time this action is called, down to a minimum of 25%. Opposite of <a href="#action.zoomIn">action.zoomIn</a>. Use <a href="#action.zoomReset">action.zoomReset</a> to go back to 100%.
        <h3 id="action.toggleSourceViewer">action.toggleSourceViewer</h3>
        With this action you can toggle Vieb's source viewer for the current page in the current tab. It will update the url to "sourceviewer://", and will revert back to original page if currently viewing the source of a page. The source viewer has syntax highlighting, and can also be used to view other types of files with highlighting.
        <h3 id="action.toggleSourceViewerNewTab">action.toggleSourceViewerNewTab</h3>
        This action works similar to <a href="#action.toggleSourceViewer">action.toggleSourceViewer</a>, but it opens the source viewer in a new tab instead of the current page. If you are currently viewing the source of a document, this action is identical to toggleSourceViewer and will revert the current tab back to the original page.
        <h3 id="action.toggleMarkdownViewer">action.toggleMarkdownViewer</h3>
        With this action you can toggle Vieb's Markdown viewer for the current page. It will update the url to "markdownviewer://", and will revert back to the original page if currently viewing the Markdown formatted version of a page. The Markdown viewer supports local files, but not all images due to CSP limitations. Markdown is a text-based markup language to created formatted text, but you can open the Markdown viewer for any page to try and parse it as such.
        <h3 id="action.toggleMarkdownViewerNewTab">action.toggleMarkdownViewerNewTab</h3>
        This action works similar to <a href="#action.toggleMarkdownViewer">action.toggleMarkdownViewer</a>, but it opens the Markdown viewer in a new tab instead of the current page. If you are currently viewing the Markdown viewer of a document, this action is identical to toggleMarkdownViewer and will revert the current tab back to the original page.
        <h3 id="action.toggleReaderView">action.toggleReaderView</h3>
        With this action you can toggle Vieb's reader view for the current page in the current tab. It will update the url to "readerview://", and will revert back to original page if currently viewing the reader view of a page. The reader view is a concise and minimal view of the relevant page contents.
        <h3 id="action.toggleReaderViewNewTab">action.toggleReaderViewNewTab</h3>
        This action works similar to <a href="#action.toggleReaderView">action.toggleReaderView</a>, but it opens the reader view in a new tab instead of the current page. If you are currently viewing the reader view of a document, this action is identical to toggleReaderView and will revert the current tab back to the original page.
        <h3 id="action.toggleTOC">action.toggleTOC</h3>
        With this action you can toggle the table of contents from showing. If it's shown, it will be hidden, if it's hidden it will be shown. Using the table of contents you can jump to any heading in the current page. You can open the table of contents on any page, but some pages will restrict injecting custom styling and thus not show the TOC properly. By default, only the toggle action is mapped, but you can also run <a href="#action.showTOC">action.showTOC</a> and <a href="#action.hideTOC">action.hideTOC</a>. Finally, you can configure which pages should by default render the TOC by editing <a href="#tocpages">tocpages</a>.
        <h3 id="action.showTOC">action.showTOC</h3>
        This action will show the TOC, regardless of current visibility. This action can be run on page load automatically by configuring <a href="#tocpages">tocpages</a>. You can hide it with <a href="#action.hideTOC">action.hideTOC</a>, or toggle it with <a href="#action.toggleTOC">action.toggleTOC</a>.
        <h3 id="action.hideTOC">action.hideTOC</h3>
        This action will hide the TOC, regardless of current visibility. You can show it with <a href="#action.showTOC">action.showTOC</a>, toggle it with <a href="#action.toggleTOC">action.toggleTOC</a> or show it automatically with <a href="#tocpages">tocpages</a>.
        <h2 id="url-modifications">Url modifications</h2>
        These actions can be used to make quick edits to the current page url. These vary from increasing port numbers to stripping subdomains. If any of these actions fail to find the part they are trying to modify, they won't update the url and the page won't be reloaded.
        <h3 id="action.nextPage">action.nextPage</h3>
        Search for pagination indicators in the page and use them to go to the next page. Due to its dependence on the page to provide the indicators, it's the only page increment action that isn't countable. Opposite of <a href="#action.previousPage">action.previousPage</a>.
        <h3 id="action.previousPage">action.previousPage</h3>
        Search for pagination indicators in the page and use them to go to the previous page. Opposite of <a href="#action.nextPage">action.nextPage</a>.
        <h3 id="action.nextPageNewTab">action.nextPageNewTab</h3>
        Search for pagination indicators in the page and use them to open a new tab of the next page url. Works similar to <a href="#action.nextPage">action.nextPage</a>, but opens the next page in a new tab instead of the current. Opposite of <a href="#action.previousPageNewTab">action.previousPageNewTab</a>.
        <h3 id="action.previousPageNewTab">action.previousPageNewTab</h3>
        Search for pagination indicators in the page and use them to open a new tab of previous next page url. Opposite of <a href="#action.nextPageNewTab">action.nextPageNewTab</a>.
        <h3 id="action.increasePageNumber">action.increasePageNumber</h3>
        Increase the page number if present in the url. It will search inside the url hash for "p" and "page" query parameters that have a number argument. If you encounter a lot of pages that use different parameters to indicate pages, consider using <a href="#action.nextPage">action.nextPage</a>, or if that fails use <a href="#action.increaseFirstNumber">action.increaseFirstNumber</a> or <a href="#action.increaseLastNumber">action.increaseLastNumber</a>. Opposite of <a href="#action.decreasePageNumber">action.decreasePageNumber</a>.
        <h3 id="action.decreasePageNumber">action.decreasePageNumber</h3>
        Decrease the page number if present in the url. See the oppposite action named <a href="#action.increasePageNumber">action.increasePageNumber</a> for more details.
        <h3 id="action.increasePortNumber">action.increasePortNumber</h3>
        Increase the port number of the url, or the default port number of the protocol. Increases only if the current port number is below 65535, as it will respect the limits of port numbers that can be navigated to with a browser: it won't go below 11 or above 65535 (this is the same range of ports recognized as valid in <a class="explore" href="#explore">explore mode</a>). Hidden port numbers are still used, such as "80" for "http" and "443" for "https". Opposite of <a href="#action.decreasePortNumber">action.decreasePortNumber</a>.
        <h3 id="action.decreasePortNumber">action.decreasePortNumber</h3>
        Decrease the port number of the url, or the default port number of the protocol. Decreases only if the current port number is higher than 11. See the opposite action named <a href="#action.increasePortNumber">action.increasePortNumber</a> for more details.
        <h3 id="action.increaseFirstNumber">action.increaseFirstNumber</h3>
        Increases the first number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of <a href="#action.decreaseFirstNumber">action.decreaseFirstNumber</a>.
        <h3 id="action.decreaseFirstNumber">action.decreaseFirstNumber</h3>
        Decreases the first number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of <a href="#action.increaseFirstNumber">action.increaseFirstNumber</a>.
        <h3 id="action.increaseLastNumber">action.increaseLastNumber</h3>
        Increases the last number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of <a href="#action.decreaseLastNumber">action.decreaseLastNumber</a>.
        <h3 id="action.decreaseLastNumber">action.decreaseLastNumber</h3>
        Decreases the last number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of <a href="#action.increaseLastNumber">action.increaseLastNumber</a>.
        <h3 id="action.toParentUrl">action.toParentUrl</h3>
        Removes a single level/directory in the url which are separated by the slash "/" character, to go up a level on the website. Will stop at the root of a domain. For example, this will change "https://github.com/Jelmerro/Vieb" to "https://github.com/Jelmerro/".
        <h3 id="action.toRootUrl">action.toRootUrl</h3>
        Removes all levels/directories in the url which are separated by the slash "/" character, to go to the root of a website. For example, this will change "https://github.com/Jelmerro/Vieb" to "https://github.com/".
        <h3 id="action.toParentSubdomain">action.toParentSubdomain</h3>
        Removes a single subdomain from the url which are separated by a dot "." character. For example, this will change "https://www.foo.bar.example.com" to "https://www.bar.example.com". The "www." part is kept if other subdomains are present, but if it's the only subdomain present, it will be removed as well, so "https://www.example.com" becomes "https://example.com" when this action is called again.
        <h3 id="action.toRootSubdomain">action.toRootSubdomain</h3>
        Removes all subdomains from the url which are separated by a dot "." character. For example, this will change "https://www.foo.bar.example.com" to "https://www.example.com". The "www." part is kept if other subdomains are present, but if it's the only subdomain present, it will be removed as well, so "https://www.example.com" becomes "https://example.com" when this action is called again. It's for this reason that this action is countable, but calling it more than two times subsequently won't do anything.
        <h2 id="splitting">Splitting</h2>
        Vieb supports window splitting, which means you can view multiple sites next to each other. There is no technical limit to how many sites you can split, and splitting works the same as in Vim. To open a new split, see <a href="#:Vexplore">:Vexplore</a> or <a href="#:split">:split</a>. Once you have multiple windows visible, you can switch between them by switching between tabs, or using the more Vim-like window split actions, which are listed below. You may also use the <a href="#:buffer">:buffer</a> command to switch directly to tabs by index or name.
        <h3 id="action.rotateSplitWindowForward">action.rotateSplitWindowForward</h3>
        Rotate the windows of the current split clockwise. Unlike Vim, you can rotate splits, even if they have subsplits. Opposite of <a href="#action.rotateSplitWindowBackward">action.rotateSplitWindowBackward</a>.
        <h3 id="action.rotateSplitWindowBackward">action.rotateSplitWindowBackward</h3>
        Rotate the windows of the current split counter-clockwise. Unlike Vim, you can rotate splits, even if they have subsplits. Opposite of <a href="#action.rotateSplitWindowForward">action.rotateSplitWindowForward</a>.
        <h3 id="action.leftHalfSplitWindow">action.leftHalfSplitWindow</h3>
        Move the currently focused split window to the left half of the screen. This effectively moves the split to the left of a toplevel vertical split, regardless of its current position on the screen. Similar actions for the other directions are <a href="#action.bottomHalfSplitWindow">action.bottomHalfSplitWindow</a>, <a href="#action.topHalfSplitWindow">action.topHalfSplitWindow</a> and <a href="#action.rightHalfSplitWindow">action.rightHalfSplitWindow</a>.
        <h3 id="action.bottomHalfSplitWindow">action.bottomHalfSplitWindow</h3>
        Move the currently focused split window to the bottom half of the screen. See <a href="#action.leftHalfSplitWindow">action.leftHalfSplitWindow</a> for more details.
        <h3 id="action.topHalfSplitWindow">action.topHalfSplitWindow</h3>
        Move the currently focused split window to the top half of the screen. See <a href="#action.leftHalfSplitWindow">action.leftHalfSplitWindow</a> for more details.
        <h3 id="action.rightHalfSplitWindow">action.rightHalfSplitWindow</h3>
        Move the currently focused split window to the right half of the screen. See <a href="#action.leftHalfSplitWindow">action.leftHalfSplitWindow</a> for more details.
        <h3 id="action.toLeftSplitWindow">action.toLeftSplitWindow</h3>
        Switch the focus to the window directly left of the currently focused one. If there are multiple windows directly to the left of the current split, the one closest to the center of the current split is chosen. Similar actions for the other directions are <a href="#action.toBottomSplitWindow">action.toBottomSplitWindow</a>, <a href="#action.toTopSplitWindow">action.toTopSplitWindow</a> and <a href="#action.toRightSplitWindow">action.toRightSplitWindow</a>.
        <h3 id="action.toBottomSplitWindow">action.toBottomSplitWindow</h3>
        Switch the focus to the window directly below the currently focused one. See <a href="#action.toLeftSplitWindow">action.toLeftSplitWindow</a> for more details.
        <h3 id="action.toTopSplitWindow">action.toTopSplitWindow</h3>
        Switch the focus to the window directly above the currently focused one. See <a href="#action.toLeftSplitWindow">action.toLeftSplitWindow</a> for more details.
        <h3 id="action.toRightSplitWindow">action.toRightSplitWindow</h3>
        Switch the focus to the window directly right of the currently focused one. See <a href="#action.toLeftSplitWindow">action.toLeftSplitWindow</a> for more details.
        <h3 id="action.toFirstSplitWindow">action.toFirstSplitWindow</h3>
        Switch the focus to the most top-left window split. The first split is always the most top-left one, regardless of tab order. Opposite of <a href="#action.toLastSplitWindow">action.toLastSplitWindow</a>.
        <h3 id="action.toLastSplitWindow">action.toLastSplitWindow</h3>
        Switch the focus to the most bottom-right window split. The last split is always the most bottom-right one, regardless of tab order. Opposite of <a href="#action.toFirstSplitWindow">action.toFirstSplitWindow</a>.
        <h3 id="action.toNextSplitWindow">action.toNextSplitWindow</h3>
        Switch the focus to the next window split in appearance order. Splits are ordered from top to bottom and left to right. When the most bottom-right split is focused when executing this action, the top-left split will be focused. Opposite of <a href="#action.toPreviousSplitWindow">action.toPreviousSplitWindow</a>.
        <h3 id="action.toPreviousSplitWindow">action.toPreviousSplitWindow</h3>
        Switch the focus to the previous window split in appearance order. Splits are ordered from top to bottom and left to right. When the most top-left split is focused when executing this action, the bottom-right split will be focused. Opposite of <a href="#action.toNextSplitWindow">action.toNextSplitWindow</a>.
        <h3 id="action.exchangeSplitWindow">action.exchangeSplitWindow</h3>
        With this action you can exchange the current window with the next one. It is different from merely reordering them, in that it keeps the focus at the current position. For example, if you have a large split on the left, and a small one on the right, with the one on the left being focused, this action will keep the focus on the left split, but exchange the contents of it with the next split. In other words, the big split on the left will have the page that was previously on the right of it and vice versa. It will always switch the current one with the next one, and the focus will remain on the position of the current one. If you execute this action on the last split, it will exchange with the one just before it and keep the focus on the last one. Although countable, the action will simply revert itself if called a second time (or any even amount of times).
        <h3 id="action.increaseHeightSplitWindow">action.increaseHeightSplitWindow</h3>
        Increase the height of the current split window by 10% up to a maximum ratio compared to its siblings of 1 to 10. Similar actions to resize into other directions are <a href="#action.decreaseHeightSplitWindow">action.decreaseHeightSplitWindow</a>, <a href="#action.increaseWidthSplitWindow">action.increaseWidthSplitWindow</a> and <a href="#action.decreaseWidthSplitWindow">action.decreaseWidthSplitWindow</a>.
        <h3 id="action.decreaseHeightSplitWindow">action.decreaseHeightSplitWindow</h3>
        Decrease the height of the current split window by 10%. See <a href="#action.increaseHeightSplitWindow">action.increaseHeightSplitWindow</a>.
        <h3 id="action.increaseWidthSplitWindow">action.increaseWidthSplitWindow</h3>
        Increase the width of the current split window by 10%. See <a href="#action.increaseHeightSplitWindow">action.increaseHeightSplitWindow</a>.
        <h3 id="action.decreaseWidthSplitWindow">action.decreaseWidthSplitWindow</h3>
        Decrease the width of the current split window by 10%. See <a href="#action.increaseHeightSplitWindow">action.increaseHeightSplitWindow</a>.
        <h3 id="action.distrubuteSpaceSplitWindow">action.distrubuteSpaceSplitWindow</h3>
        Distribute the windows inside a split evenly. This does not necessarily mean that all windows will be of the same size, for example if you have a vertical split, with on the left side a window, but on the right side a horizontal sub-split with two windows.
        <h2 id="pointer">Pointer</h2>
        Vieb has a <a class="pointer" href="#pointer">pointer mode</a> to hover over links, download images or inspect an element at a position. The pointer can be moved in many different ways, most of which are by default mapped similar to Vim's <a class="normal" href="#normal">normal mode</a>. Additionally, after entering <a class="pointer" href="#pointer">pointer mode</a>, it's also possible to start selecting text using <a class="visual" href="#visual">visual mode</a>. By default, the mappings of these two modes are similar, with the biggest difference being that text will be selected between the initial and current pointer position. See <a href="#pointer.startVisualSelect">pointer.startVisualSelect</a> to activate <a class="visual" href="#visual">visual mode</a> and <a href="#pointer.copyText">pointer.copyText</a> to copy the hovered link or selected text. Other text related actions are also available, such as opening the text in a new tab (either as a url or a search) using <a href="#pointer.newtabText">pointer.newtabText</a>.
        <h3 id="pointer.start">pointer.start</h3>
        Switch to <a href="#pointer" class="pointer">pointer mode</a>, which enables a movable pointer. The pointer can be used to hover over links, download images or inspect an element at a position. It can be moved in many different ways, most of which are by default mapped similar to Vim's <a class="normal" href="#normal">normal mode</a>.
        <h3 id="pointer.moveToMouse">pointer.moveToMouse</h3>
        Move the pointer to the location of your mouse cursor. Will switch to <a class="pointer" href="#pointer">pointer mode</a> if needed. If already in <a class="pointer" href="#pointer">pointer mode</a> or <a class="visual" href="#visual">visual mode</a>, the current mode remains and it will simple move the pointer to the mouse location. Unlike other mouse related actions, this action does not require any <a href="#mouse">mouse</a> features to be enabled.
        <h3 id="pointer.leftClick">pointer.leftClick</h3>
        Simulate a left mouse click at the current pointer location. See also <a href="#pointer.rightClick">pointer.rightClick</a>.
        <h3 id="pointer.rightClick">pointer.rightClick</h3>
        Execute a right mouse click at the pointer position. This will open any kind of menu that the website has implemented, or open Vieb's built-in menu if <a href="#menupage">menupage</a> is enabled.
        <h3 id="pointer.inspectElement">pointer.inspectElement</h3>
        Inspect an element at the current pointer position. This action will open a devtools window if the devtools are not opened yet. The <a href="#devtoolsposition">devtoolsposition</a> is not used when inspecting an element, as it will open a devtools window. If you want to open the devtools differently, please open the devtools with the <a href="#:devtools">:devtools</a> command first. The "inspectElement" action will use the existing devtools to inspect the element in.
        <h3 id="pointer.insertAtPosition">pointer.insertAtPosition</h3>
        Enter <a class="insert" href="#insert">insert mode</a> at the pointer position. This can be used to click and immediately set focus to the element at a position, similar to an actual mouse click. Contrary to <a href="#pointer.leftClick">pointer.leftClick</a>, this type of click has a better chance to work for poorly programmed dropdowns and/or custom menus on websites: the ones that open with a click, but close automatically when focus is lost. Some Google websites use these type of inconsistent menus.
        <h3 id="pointer.moveUp">pointer.moveUp</h3>
        Move the pointer up by 10 pixels, will scroll the page if needed.
        <h3 id="pointer.moveDown">pointer.moveDown</h3>
        Move the pointer down by 10 pixels, will scroll the page if needed.
        <h3 id="pointer.moveLeft">pointer.moveLeft</h3>
        Move the pointer left by 10 pixels, will scroll the page if needed.
        <h3 id="pointer.moveRight">pointer.moveRight</h3>
        Move the pointer right by 10 pixels, will scroll the page if needed.
        <h3 id="pointer.moveSlowUp">pointer.moveSlowUp</h3>
        Move the pointer up by 1 pixel, will not scroll the page.
        <h3 id="pointer.moveSlowDown">pointer.moveSlowDown</h3>
        Move the pointer down by 1 pixel, will not scroll the page.
        <h3 id="pointer.moveSlowLeft">pointer.moveSlowLeft</h3>
        Move the pointer left by 1 pixel, will not scroll the page.
        <h3 id="pointer.moveSlowRight">pointer.moveSlowRight</h3>
        Move the pointer right by 1 pixel, will not scroll the page.
        <h3 id="pointer.moveFastUp">pointer.moveFastUp</h3>
        Move the pointer up by 100 pixels, will scroll the page if needed.
        <h3 id="pointer.moveFastDown">pointer.moveFastDown</h3>
        Move the pointer down by 100 pixels, will scroll the page if needed.
        <h3 id="pointer.moveFastLeft">pointer.moveFastLeft</h3>
        Move the pointer left by 100 pixels, will scroll the page if needed.
        <h3 id="pointer.moveFastRight">pointer.moveFastRight</h3>
        Move the pointer right by 100 pixels, will scroll the page if needed.
        <h3 id="pointer.moveLeftMax">pointer.moveLeftMax</h3>
        Move the pointer all the way to the left of the current screen.
        <h3 id="pointer.moveRightMax">pointer.moveRightMax</h3>
        Move the pointer all the way to the right of the current screen.
        <h3 id="pointer.scrollUp">pointer.scrollUp</h3>
        Scroll 100 pixels up at the current pointer position, without changing the pointer position. See <a href="#scrolling">scrolling</a> for more details.
        <h3 id="pointer.scrollDown">pointer.scrollDown</h3>
        Scroll 100 pixels down at the current pointer position, without changing the pointer position. See <a href="#scrolling">scrolling</a> for more details.
        <h3 id="pointer.scrollLeft">pointer.scrollLeft</h3>
        Scroll 100 pixels left at the current pointer position, without changing the pointer position. See <a href="#scrolling">scrolling</a> for more details.
        <h3 id="pointer.scrollRight">pointer.scrollRight</h3>
        Scroll 100 pixels right at the current pointer position, without changing the pointer position. See <a href="#scrolling">scrolling</a> for more details.
        <h3 id="pointer.startOfView">pointer.startOfView</h3>
        Move the pointer to the top of the screen vertically, without scrolling the page in any way. See also <a href="#pointer.centerOfView">pointer.centerOfView</a> and <a href="#pointer.endOfView">pointer.endOfView</a>. To do the same but with scrolling, see <a href="#pointer.startOfPage">pointer.startOfPage</a>.
        <h3 id="pointer.centerOfView">pointer.centerOfView</h3>
        Move the pointer to the center of the screen vertically. This action does not scroll the page in any way. See also <a href="#pointer.startOfView">pointer.startOfView</a> and <a href="#pointer.endOfView">pointer.endOfView</a>.
        <h3 id="pointer.endOfView">pointer.endOfView</h3>
        Move the pointer to the bottom of the screen vertically, without scrolling the page in any way. See also <a href="#pointer.centerOfView">pointer.centerOfView</a> and <a href="#pointer.startOfView">pointer.startOfView</a>. To do the same but with scrolling, see <a href="#pointer.endOfPage">pointer.endOfPage</a>.
        <h3 id="pointer.startOfPage">pointer.startOfPage</h3>
        Scroll the page to the top and move the pointer to the top of the screen vertically. To do the same without scrolling, see <a href="#pointer.startOfView">pointer.startOfView</a>.
        <h3 id="pointer.endOfPage">pointer.endOfPage</h3>
        Scroll the page to the bottom and move the pointer to the bottom of the screen vertically. To do the same without scrolling, see <a href="#pointer.endOfView">pointer.endOfView</a>.
        <h2 id="visual">Visual</h2>
        Switching to <a class="visual" href="#visual">visual mode</a> will start making a selection starting at the current pointer position. In this mode the pointer is still visible, but once the pointer is moved again, all text between the original and current location will be selected. To copy the selected text, see <a href="#pointer.copyText">pointer.copyText</a>. Most movement options in <a class="visual" href="#visual">visual mode</a> are identical to those in <a class="pointer" href="#pointer">pointer mode</a> by default. You can also select text with the <a href="#mouse">mouse</a>, after which you can copy it with the <a href="#menu">menu</a> or with the actions below. You can control if mouse selections should change the <a class="visual" href="#visual">visual mode</a> selection, or even switch modes, using the <a href="#mousevisualmode">mousevisualmode</a> setting.
        <h3 id="pointer.startVisualSelect">pointer.startVisualSelect</h3>
        Switches to <a class="visual" href="#visual">visual mode</a>, mostly useful when called from <a class="pointer" href="#pointer">pointer mode</a>, but can be called from other modes directly if a mapping is added for it.
        <h3 id="pointer.restoreSelection">pointer.restoreSelection</h3>
        Starts <a class="visual" href="#visual">visual mode</a> and restore the selection from the last time <a class="visual" href="#visual">visual mode</a> was open. Can be called from any mode if desired, as you will switch modes with this action, during which the selection is restored.
        <h3 id="pointer.swapPosition">pointer.swapPosition</h3>
        Using this action you can switch to the other end of the selection while in <a class="visual" href="#visual">visual mode</a>. It has no effect when called from other modes, as there is no other position to swap the pointer to. You can switch back and forth between the start and end position with this action as many times as you want to.
        <h3 id="pointer.copyText">pointer.copyText</h3>
        This action will copy the currently selected text to the system clipboard. It is mainly there for custom mappings and for copying <a class="visual" href="#visual">visual mode</a> selections. If there is a selection made via other means, this action will still work, so it can technically be used outside of <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a>. For programmatically pasting the clipboard text to input/textarea elements on the page, see the <a class="insert" href="#insert">insert mode</a> specific <a href="#action.pasteText">action.pasteText</a>.
        <h3 id="pointer.downloadText">pointer.downloadText</h3>
        Attempts to download the selected text as if it were a url, if it's not, this action might not succeed in starting a download.
        <h3 id="pointer.externalText">pointer.externalText</h3>
        Attempts to open the selected text as if it were a url with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the selected text.
        <h3 id="pointer.newtabText">pointer.newtabText</h3>
        Open the selected text in a new tab. If it's a url, it's opened as is. Other types of text are searched for using the default <a href="#searchengine">searchengine</a>.
        <h3 id="pointer.openText">pointer.openText</h3>
        Open the selected text in the current tab. If it's a url, it's directly navigated to. Other types of text are searched for using the default <a href="#searchengine">searchengine</a>.
        <h3 id="pointer.searchText">pointer.searchText</h3>
        Search the selected text in the current page as if the selected text was typed into <a class="search" href="#search">search mode</a>.
        <h3 id="pointer.splitText">pointer.splitText</h3>
        Open the selected text in a new split, similar to using the <a href="#:split">:split</a> command to do so. If it's a url, it's directly navigated to. Other types of text are searched for using the default <a href="#searchengine">searchengine</a>.
        <h3 id="pointer.vsplitText">pointer.vsplitText</h3>
        Open the selected text in a new vertical split, similar to using the <a href="#:vsplit">:vsplit</a> command to do so. If it's a url, it's directly navigated to. Other types of text are searched for using the default <a href="#searchengine">searchengine</a>.
        <h2 id="link-related">Link-related actions</h2>
        Most of these link related actions are actions for <a class="pointer" href="#pointer">pointer mode</a> and some are suited for <a class="normal" href="#normal">normal mode</a>. The default <a class="pointer" href="#pointer">pointer mode</a> mappings might seem a bit overwhelming, but they are based on the following pattern: "o" for open, "t" for newtab, "y" for yank, "d" for download, "x" for external, "S" for splits and "V" for vsplit/vertical splits. These keys are then combined with the type of link or media like so: "a" for audio", "v" for video, "l" for links, "f" for frames and "i" for images. Actions for urls are by also mapped to the same key twice by default, such as "dd" or "yy". Almost all pointer actions listed in this paragraph are identical to the options available in the context <a href="#menu">menu</a>, so you can also use that if these link-related actions seem complex. Opening the menu is done with <a href="#action.menuOpen">action.menuOpen</a>, or using the <a href="#mouse">mouse</a> if the menu features are not disabled. Some of the <a class="normal" href="#normal">normal mode</a> actions listed here can instead be used to copy the page url in special ways, such as formatted as HTML or Markdown. Keep in mind that all copy and external link-related actions will be encoded or decoded based on the values of the <a href="#encodeurlcopy">encodeurlcopy</a> and <a href="#encodeurlext">encodeurlext</a> settings.
        <h3 id="action.openLinkExternal">action.openLinkExternal</h3>
        Using this action you can open links with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the current page url. See <a href="#pointer.externalLink">pointer.externalLink</a> to do the same for the link at the current pointer position.
        <h3 id="action.pageToClipboard">action.pageToClipboard</h3>
        With this action you can copy the url of the current page to the system clipboard. You can paste it anywhere else, but also use it in Vieb directly using <a href="#action.openFromClipboard">action.openFromClipboard</a>. If you want to copy a url on the page instead, see <a href="#pointer.copyLink">pointer.copyLink</a>. You can also copy the page title with <a href="#action.pageTitleToClipboard">action.pageTitleToClipboard</a>, or copy the link formatted for pasting inside Emacs, HTML, RST or Markdown, using <a href="#action.pageToClipboardEmacs">action.pageToClipboardEmacs</a>, <a href="#action.pageToClipboardHTML">action.pageToClipboardHTML</a>, <a href="#action.pageToClipboardRST">action.pageToClipboardRST</a> or <a href="#action.pageToClipboardMarkdown">action.pageToClipboardMarkdown</a> respectively. Finally, you can also copy the page title of a hovered link to the clipboard if stored in the local history using <a href="#pointer.copyPageTitle">pointer.copyPageTitle</a>.
        <h3 id="action.pageTitleToClipboard">action.pageTitleToClipboard</h3>
        Copy the title of the current page to the system clipboard. Can for example be combined with other actions to search for the current page title. See also <a href="#pointer.copyPageTitle">pointer.copyPageTitle</a> to copy the page title of hovered links while in <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id="action.pageToClipboardHTML">action.pageToClipboardHTML</h3>
        Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an HTML document, like so: <span class="command-block">&lt;a href="URL"&gt;TITLE&lt;/a&gt;</span>.
        <h3 id="action.pageToClipboardEmacs">action.pageToClipboardEmacs</h3>
        Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an Org Emacs document, like so: <span class="command-block">[[LINK][TITLE]]</span>.
        <h3 id="action.pageToClipboardRST">action.pageToClipboardRST</h3>
        Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an RST document, like so: <span class="command-block">`TITLE &lt;URL&gt;`_</span>.
        <h3 id="action.pageToClipboardMarkdown">action.pageToClipboardMarkdown</h3>
        Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in a Markdown document, like so: <span class="command-block">[LINK](TITLE)</span>.
        <h3 id="action.downloadLink">action.downloadLink</h3>
        Downloads the current page link directly as a file. The name will be automatically set, and downloaded files will be stored in <a href="#downloadpath">downloadpath</a>. This is different from the <a href="#:write">:write</a> command, which will try to save the page as a website. To download the link you are hovering with the pointer, see <a href="#pointer.downloadLink">pointer.downloadLink</a>.
        <h3 id="action.pageRSSLinksList">action.pageRSSLinksList</h3>
        This action will give a list of RSS feed links found on the current page. Each link will be assigned a number, which can be used with <a href="#action.pageRSSLinkToClipboard">action.pageRSSLinkToClipboard</a> to copy the link by index.
        <h3 id="action.pageRSSLinkToClipboard">action.pageRSSLinkToClipboard</h3>
        Copies the page RSS link to the clipboard by index of the last pressed key (should ideally be a number), of the list returned by <a href="#action.pageRSSLinksList">action.pageRSSLinksList</a>. If the last key is not a number, it will return the first RSS feed link found. The links are transformed as configured by <a href="#encodeurlcopy">encodeurlcopy</a>, like other copy actions.
        <h3 id="pointer.copyAudio">pointer.copyAudio</h3>
        Copy the location of the audio element at the pointer position to the system clipboard.
        <h3 id="pointer.copyFrame">pointer.copyFrame</h3>
        Copy the location of any frame at the pointer position to the system clipboard.
        <h3 id="pointer.copyImage">pointer.copyImage</h3>
        Copy the location of an image, svg or background at the pointer position to the system clipboard. Not to be confused with <a href="#pointer.copyImageBuffer">pointer.copyImageBuffer</a> for copying the image data to the clipboard as an image buffer.
        <h3 id="pointer.copyImageBuffer">pointer.copyImageBuffer</h3>
        Copy the frame buffer of an image, svg or background at the pointer position to the system clipboard. In supported applications, you can paste your clipboard data directly as an image.
        <h3 id="pointer.copyLink">pointer.copyLink</h3>
        Copy the url of the link at the pointer position to the system clipboard. To copy the current page url instead, use <a href="#action.pageToClipboard">action.pageToClipboard</a>.
        <h3 id="pointer.copyVideo">pointer.copyVideo</h3>
        Copy the location of the video element at the pointer position to the system clipboard.
        <h3 id="pointer.copyTitleAttr">pointer.copyTitleAttr</h3>
        This pointer action copies the title attribute of a hovered element, as an alternative to hovering a link with the mouse. Hovering an element with the mouse will show the title, while hovering it using the pointer will not due to technical limitations. This action allows you to get access to the title attribute without using the mouse. Not to be confused with <a href="#pointer.copyPageTitle">pointer.copyPageTitle</a>, which copies the page tile for the hovered url, or with <a href="#action.pageTitleToClipboard">action.pageTitleToClipboard</a>, which copies the title of the current page to the clipboard. Finally, to copy the link of the current page see <a href="#action.pageToClipboard">action.pageToClipboard</a> to copy the current page url and <a href="#pointer.copyLink">pointer.copyLink</a> to copy the url of the hovered link.
        <h3 id="pointer.copyPageTitle">pointer.copyPageTitle</h3>
        This pointer action copies the page title of the hovered url to the clipboard. The title is fetched from the local history based on the link url, so if there is no link or no local history for the url this will not copy anything. Not to be confused with <a href="#pointer.copyTitleAttr">pointer.copyTitleAttr</a>, which copies the title attribute of an element, or with <a href="#action.pageTitleToClipboard">action.pageTitleToClipboard</a>, which copies the title of the current page to the clipboard. Finally, to copy the link of the current page see <a href="#action.pageToClipboard">action.pageToClipboard</a> to copy the current page url and <a href="#pointer.copyLink">pointer.copyLink</a> to copy the url of the hovered link.
        <h3 id="pointer.downloadAudio">pointer.downloadAudio</h3>
        Download an audio file at the pointer position.
        <h3 id="pointer.downloadFrame">pointer.downloadFrame</h3>
        Download the frame location at the pointer position directly as a file.
        <h3 id="pointer.downloadImage">pointer.downloadImage</h3>
        Download an image at the pointer position. If there are multiple images at the pointer position, only the first one will be downloaded. The name will be automatically set, and downloaded files will be stored in <a href="#downloadpath">downloadpath</a>. This action will search specifically for img and svg tags at a position, as well as background images if no regular images are found at the location.
        <h3 id="pointer.downloadLink">pointer.downloadLink</h3>
        Download the url of the link at the pointer position directly as a file. This pointer download action is different from <a href="#action.downloadLink">action.downloadLink</a>, which will download the current page url instead of the one that's hovered in <a class="pointer" href="#pointer">pointer mode</a>.
        <h3 id="pointer.downloadVideo">pointer.downloadVideo</h3>
        Download a video file at the pointer position.
        <h3 id="pointer.externalAudio">pointer.externalAudio</h3>
        Open the location of any audio element at the pointer position with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the audio element location.
        <h3 id="pointer.externalFrame">pointer.externalFrame</h3>
        Open the location of any frame element at the pointer position with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the frame element location.
        <h3 id="pointer.externalImage">pointer.externalImage</h3>
        Open the location of an image, svg or background at the pointer position with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the image location.
        <h3 id="pointer.externalLink">pointer.externalLink</h3>
        Open the url of the link at the pointer position with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with link location. See also <a href="#action.openLinkExternal">action.openLinkExternal</a> to do something similar for the current page url.
        <h3 id="pointer.externalVideo">pointer.externalVideo</h3>
        Open the location of any video element at the pointer position with external applications. The command that will be executed is based on the <a href="#externalcommand">externalcommand</a> setting, appended with the video element location.
        <h3 id="pointer.newtabAudio">pointer.newtabAudio</h3>
        Open the audio element location at the pointer position in a new tab.
        <h3 id="pointer.newtabFrame">pointer.newtabFrame</h3>
        Open the frame element location at the pointer position in a new tab.
        <h3 id="pointer.newtabImage">pointer.newtabImage</h3>
        Open the image, svg or background location at the pointer position in a new tab.
        <h3 id="pointer.newtabLink">pointer.newtabLink</h3>
        Open the link location at the pointer position in a new tab.
        <h3 id="pointer.newtabVideo">pointer.newtabVideo</h3>
        Open the video element location at the pointer position in a new tab.
        <h3 id="pointer.openAudio">pointer.openAudio</h3>
        Open the audio element location at the pointer position in the current tab.
        <h3 id="pointer.openFrame">pointer.openFrame</h3>
        Open the frame element location at the pointer position in the current tab.
        <h3 id="pointer.openImage">pointer.openImage</h3>
        Open the image location at the pointer position in the current tab.
        <h3 id="pointer.openLink">pointer.openLink</h3>
        Open the link location at the pointer position in the current tab. This is fairly similar to navigating by clicking it with <a href="#pointer.leftClick">pointer.leftClick</a> or the <a href="#mouse">mouse</a>. The biggest difference is for elements that do something special when clicked, which won't happen when using this pointer action to navigate directly to the link.
        <h3 id="pointer.openVideo">pointer.openVideo</h3>
        Open the video element location at the pointer position in the current tab.
        <h3 id="pointer.splitAudio">pointer.splitAudio</h3>
        Open the audio element location at the pointer position in a new split.
        <h3 id="pointer.splitFrame">pointer.splitFrame</h3>
        Open the frame element location at the pointer position in a new split.
        <h3 id="pointer.splitImage">pointer.splitImage</h3>
        Open the image, svg or background location at the pointer position in a new split.
        <h3 id="pointer.splitLink">pointer.splitLink</h3>
        Open the link location at the pointer position in a new split.
        <h3 id="pointer.splitVideo">pointer.splitVideo</h3>
        Open the video element location at the pointer position in a new split.
        <h3 id="pointer.vsplitAudio">pointer.vsplitAudio</h3>
        Open the audio element location at the pointer position in a new vertical split.
        <h3 id="pointer.vsplitFrame">pointer.vsplitFrame</h3>
        Open the frame element location at the pointer position in a new vertical split.
        <h3 id="pointer.vsplitImage">pointer.vsplitImage</h3>
        Open the image, svg or background location at the pointer position in a new vertical split.
        <h3 id="pointer.vsplitLink">pointer.vsplitLink</h3>
        Open the link location at the pointer position in a new vertical split.
        <h3 id="pointer.vsplitVideo">pointer.vsplitVideo</h3>
        Open the video element location at the pointer position in a new vertical split.
        <h2 id="media-related">Media-related actions</h2>
        These actions relate to media such as audio or video elements. They mostly control the playback of them, as download and link-related actions have <a href="#link-related">their own paragraph</a>. There are also <a href="#menu">menu</a> items for these actions, which will slightly change their name depending on the current states of these toggles ("Play" becomes "Pause" for example).
        <h3 id="pointer.toggleMediaControls">pointer.toggleMediaControls</h3>
        With this action you can toggle the visibility of the video player controls of the browser. The website might hide them, or have a custom interface instead of these native controls, so this action allows you to toggle the visibility at will.
        <h3 id="pointer.toggleMediaLoop">pointer.toggleMediaLoop</h3>
        With this action you can toggle the loop property of a video or audio element. If enabled, the audio or video will start from the beginning upon reaching the end, otherwise the playback will be stopped. Most websites have their playback looping off by default, but you can enable it with this action.
        <h3 id="pointer.toggleMediaMute">pointer.toggleMediaMute</h3>
        Toggle the mute state of an audio or video element. If enabled, no audio will be heard from that element. Most players show the mute state in their interface, though you can always check it using the <a href="#menu">menu</a>.
        <h3 id="pointer.toggleMediaPlay">pointer.toggleMediaPlay</h3>
        Toggle playback of an audio or video element. Simply pauses if playing, and starts playing if paused. Most websites will allow you to control this more easily, but it's provided as an action in Vieb regardless.
        <h3 id="pointer.mediaDown">pointer.mediaDown</h3>
        Lower the volume of an audio or video element by 10%. If already at 0% volume, nothing happens. Can be counted to lower the volume faster. If the volume is zero and you call <a href="#pointer.toggleMediaMute">toggleMediaMute</a> you will put it back to 100% volume, not to what the volume was before you set it to 0.
        <h3 id="pointer.mediaUp">pointer.mediaUp</h3>
        Raise the volume of an audio or video element by 10%. If already at 100% volume, nothing happens. Can be counted to raise the volume faster.
        <h3 id="pointer.mediaFaster">pointer.mediaFaster</h3>
        Increase the playback rate of an audio or video element to the next level. The fastest speed is 4x, if already at this level, this action does nothing.
        <h3 id="pointer.mediaSlower">pointer.mediaSlower</h3>
        Decrease the playback rate of an audio or video element to the previous level. The slowest speed is 0.25x, if already at this level, this action does nothing.
        <h2 id="menu">Menu actions</h2>
        Menu actions are for interacting with the right click context menu. You can open the menu with a right <a href="#mouse">mouse</a> click (if not disabled by mouse or menu settings), using the <a href="#pointer.rightClick">pointer.rightClick</a> action (if not disabled by menu settings) or always using <a href="#action.menuOpen">action.menuOpen</a>. Most of these actions don't do anything when no contextmenu is currently opened. As such, it's recommended to only use these actions with the <a href="#:mmap">:mmap</a> command. The most notable exception is <a href="#action.menuOpen">action.menuOpen</a> to open the menu. You can control, disable or enable the different menus with <a href="#menupage">menupage</a>, <a href="#menusuggest">menusuggest</a> and <a href="#menuvieb">menuvieb</a>, which if disabled prevent them from being opened with the mouse or as a side effect in <a class="pointer" href="#pointer">pointer mode</a>. The open action will always open the menu, though you can <a href="#:unmap">unmap</a> it if that's unwanted.
        <h3 id="action.menuOpen">action.menuOpen</h3>
        With this action you can open the menu without using a right click. It can be used inside <a class="insert" href="#insert">insert mode</a>, to open a menu for the currently active element. In <a class="search" href="#search">search mode</a>, <a class="command" href="#command">command mode</a> and <a class="explore" href="#explore">explore mode</a> this will open the menu at the navbar for the current caret position or selection. In <a class="pointer" href="#pointer">pointer mode</a> and <a class="visual" href="#visual">visual mode</a> it will open the page context menu. In <a class="normal" href="#normal">normal mode</a> this opens the current tab menu. Action is ignored if used from <a class="follow" href="#follow">follow mode</a> without <a href="#followfallbackaction">filtering</a> or used in <a class="insert" href="#insert">insert mode</a> without a focused element.
        <h3 id="action.menuUp">action.menuUp</h3>
        With this action you can move the selected contextmenu item up. It will select the bottom one if the top of the list is reached or no entry was previously highlighted. Opposite of <a href="#action.menuDown">action.menuDown</a>. Items can be selected with <a href="#action.menuSelect">action.menuSelect</a>.
        <h3 id="action.menuDown">action.menuDown</h3>
        This action moves the selected contextmenu item one down. Opposite of <a href="#action.menuDown">action.menuDown</a>. Wrapping happens in both directions.
        <h3 id="action.menuTop">action.menuTop</h3>
        This action moves the selected contextmenu item to the very first entry in the menu. Opposite of <a href="#action.menuBottom">action.menuBottom</a>.
        <h3 id="action.menuBottom">action.menuBottom</h3>
        This action moves the selected contextmenu item to the very last entry in the menu. Opposite of <a href="#action.menuTop">action.menuTop</a>.
        <h3 id="action.menuSectionDown">action.menuSectionDown</h3>
        This action moves the selected contextmenu item to first item in the next section of the menu. If you have selected an item in the middle of a section it will also select the first one of the next section. It will select the very first menu entry when there is no next section. Opposite of <a href="#action.menuSectionUp">action.menuSectionUp</a>.
        <h3 id="action.menuSectionUp">action.menuSectionUp</h3>
        This action moves the selected contextmenu item to first item in the previous section of the menu. Opposite of <a href="#action.menuSectionDown">action.menuSectionDown</a>. Wrapping happens in both directions.
        <h3 id="action.menuSelect">action.menuSelect</h3>
        Executes the currently selected contextmenu item. This will also close the menu. For more details on how to close the menu without picking a menu item, see <a href="#action.menuClose">action.menuClose</a>.
        <h3 id="action.menuClose">action.menuClose</h3>
        Using this action you can close the contextmenu without any side-effects. The contextmenu will also be closed if you press any key not mapped with <a href="#:mmap">:mmap</a>. For example: you right-click on a link in <a class="pointer" href="#pointer">pointer mode</a> using <a href="#pointer.rightClick">pointer.rightClick</a>, this will bring up the contextmenu, which you can navigate with the menu actions (though <a href="#action.menuOpen">action.menuOpen</a> is recommended in most cases). If you would press any other key, you would execute it in <a class="pointer" href="#pointer">pointer mode</a>, instead of it being used to navigate the menu. This works the same for other modes. The menuClose action exists to allow you to close the menu without side effects. Any other key that is not mapped with <a href="#:mmap">:mmap</a> will assume default operation of that key as if the menu wasn't there. As such, if you never want to interact with the contextmenu using the keyboard, simply execute <span class="command-block">:mmapclear!</span>, see <a href="#:mmapclear">:mmapclear</a> for details.
        <h2 id="quickmarking">Quickmarking</h2>
        Marks are a way to quickly store scroll positions, pointer positions or page urls based on a specific key. You can create and load them with actions, while you do advanced modifications with commands, which are listed per action. All relevant commands are in <a href="#quickmarks">quickmarks</a>. All quickmarks are written to the "quickmarks" file in the <a href="#datafolder">datafolder</a>, which you can also edit manually if wanted. You can also choose to delete it on quit, using <a href="#quickmarkpersistence">quickmarkpersistence</a>.
        <h3 id="action.storeScrollPos">action.storeScrollPos</h3>
        Use this action to store a new scroll position into the key that was last pressed. Recommended use is to end the mapping with an <a href="#any">Any</a>, which is also the default. The scrolling position of the current page in pixels will be stored with this action. Depending on the casing of the key and the value of the <a href="#scrollpostype">scrollpostype</a> setting, it will either be stored globally or locally. Global positions can be restored at all times using <a href="#action.restoreScrollPos">action.restoreScrollPos</a>, while local ones will be stored per domain or url, depending on the <a href="#scrollposlocalid">scrollposlocalid</a> setting. You can list all stored scroll positions with <a href=":scrollpos">:scrollpos</a>, or delete them with <a href=":delscrollpos">:delscrollpos</a>.
        <h3 id="action.restoreScrollPos">action.restoreScrollPos</h3>
        Restore a scroll position after storing it with <a href="#action.storeScrollPos">action.storeScrollPos</a>. The last pressed key is used to lookup the stored position, which gives priority to local position storted in that key, and falls back to global ones by key. The <a href="#:restorescrollpos">:restorescrollpos</a> command is similar, but allows you to give a custom domain/url to find the scroll position key.
        <h3 id="action.makeMark">action.makeMark</h3>
        With this action you can make a new page url mark into the last pressed key. Recommended use is to end the mapping with an <a href="#any">Any</a>, which is also the default. The current page url is stored by key with this action. Unlike scrolling positions, there are no local or global marks, as that does not make much sense with urls. Instead, by default shifted keys do the same as unshifted ones, and it's only on restore that they potentially do something different (not by default, see <a href="#markposition">markposition</a> and <a href="#markpositionshifted">markpositionshifted</a>). You can list all marks with <a href="#:marks">:marks</a>, delete marks with <a href="#:delmarks">:delmarks</a>, and load them using <a href="#action.restoreMark">action.restoreMark</a>.
        <h3 id="action.restoreMark">action.restoreMark</h3>
        Using this action, you can restore a mark based on the last pressed key, after storing it with <a href="#action.makeMark">action.makeMark</a>. When restoring a stored page url, you can control it's new position using the <a href="#markposition">markposition</a> setting, which is by default set to "newtab", and will work for both shifted and unshifted keys by default. You can however change the behavior of shifted keys separately using <a href="#markpositionshifted">markpositionshifted</a>, to make them restore to a different place from unshifted keys. The <a href="#:restoremark">:restoremark</a> command is similar, but allows you to give a custom position for the mark to be restored to.
        <h3 id="pointer.storePos">pointer.storePos</h3>
        Use this <a class="pointer" href="#pointer">pointer mode</a> action to store a new pointer position into the key that was last pressed. Recommended use is to end the mapping with an <a href="#any">Any</a>, which is also the default. The x and y position of the pointer in pixels will be stored with this action. Depending on the casing of the key and the value of the <a href="#pointerpostype">pointerpostype</a> setting, it will either be stored globally or locally. Global positions can be restored at all times using <a href="#pointer.restorePos">pointer.restorePos</a>, while local ones will be stored per domain or url, depending on the <a href="#pointerposlocalid">pointerposlocalid</a> setting. You can list all stored pointer positions with <a href=":pointerpos">:pointerpos</a>, or delete them with <a href=":delpointerpos">:delpointerpos</a>.
        <h3 id="pointer.restorePos">pointer.restorePos</h3>
        Restore a pointer position in <a class="pointer" href="#pointer">pointer mode</a> after storing it with <a href="#pointer.storePos">pointer.storePos</a>. The last pressed key is used to lookup the stored position, which gives priority to local position storted in that key, and falls back to global ones by key. The <a href="#:restorepointerpos">:restorepointerpos</a> command is similar, but allows you to give a custom domain/url to find the pointer position key.
        <h2 id="record">Record</h2>
        Recording is a Vim feature also known as macros, which allows you to record your actions and repeat them in order. This comes down to starting and stopping a recording, then later running it.
        <h3 id="action.startRecording">action.startRecording</h3>
        Starts recording a new macro and store it into the key that was last pressed. You can see if you are recording by the indicator if <a href="#showcmd">showcmd</a> is not disabled. When recording, all actions you execute and keys you press are stored, until you run <a href="#action.stopRecording">action.stopRecording</a>. You can only start one record at a time, so even if you recursively call startRecording it will only keep running the main first, until you stop it. By default, starting a recording is mapped in a way that it will also prevent recordings until you stop the current one, by unmapping itself on call.
        <h3 id="action.stopRecording">action.stopRecording</h3>
        Stops the active recording after it was started with <a href="#action.startRecording">action.startRecording</a>. This is the only time the "recordings" file is written inside the <a href="#datafolder">datafolder</a>. It will overwrite the existing recording if you used the same key that you used before. Because Vieb's mapping system is more pure than Vim's, in that it does not modify your mappings within actions, the default mapping for stopping a recording will add mappings that allow you to start a recording again. Both actions will work fine if you just map them to the action without it, but you would need to wait <a href="#timeoutlen">timeoutlen</a> before being able to stop a recording, as there would be additional mappings to wait for to consider if not umapped.
        <h3 id="action.runRecording">action.runRecording</h3>
        Run a stored recording based on the last pressed key, can itself be prefixed with a count. Recordings have to be made first with <a href="#action.startRecording">action.startRecording</a> and <a href="#action.stopRecording">action.stopRecording</a>. I will run the exact actions and press the same keys that were run between starting and stopping a recording that you used the same key for. Recordings are read from a "recordings" file inside the <a href="#datafolder">datafolder</a>. By default you cannot run recordings named ":" since those will execute <a href="#action.commandHistoryPrevious">the last command</a> again instead.
        <h2>Other actions</h2>
        All other actions within Vieb.
        <h3 id="action.repeatLastAction">action.repeatLastAction</h3>
        This action repeats the last action or executed mapstring. For example, after executing <a href="#pointer.moveDown">pointer.moveDown</a>, you can execute this action to move the pointer down again. The count is not transferred when doing this, so you can give the repeat action its own count by prefixing it with numbers: "5&lt;p.moveDown&gt;" and then "2&lt;repeatLastAction&gt;" will move down 7 times in total, not 10. It does not repeat commands, but does repeat mappings executed by them, such as when using <a href="#:call">:call</a>. For repeating more advanced actions, see <a href="#record">record</a>.
        <h3 id="action.toggleAlwaysOnTop">action.toggleAlwaysOnTop</h3>
        This action toggles the always on top state of the window. If your operating system provides a native way to do this, Vieb will try to update that state and keep it in sync.
        <h3 id="action.toggleFullscreen">action.toggleFullscreen</h3>
        This action toggles the fullscreen state. By default, the gui is configured to automatically hide while fullscreen is active, which can be configured with <a href="#guifullscreennavbar">guifullscreennavbar</a> and <a href="#guifullscreentabbar">guifullscreentabbar</a>. If you are hiding the tabbar, it might be useful to also show the "line" <a href="#loadingindicator">loadingindicator</a>.
        <h3 id="action.nop">action.nop</h3>
        This "Nop" action does nothing, but can be used to override default functionality, without removing the mapping. One advantage of this, is that while in <a class="insert" href="#insert">insert mode</a>, keys with mappings will not be registered by the website. This also works for adding a mapping that does only "Nop". By default, this is only done for the lock keys, such as CapsLock, so that they aren't registered by websites. This also means that pressing keys to leave <a class="insert" href="#insert">insert mode</a>, such as <span class="command-block">Esc</span> by default, will need to be unmapped if you want to send those keypresses to the website. In general, lock keys such as CapsLock aren't registered by Vieb on their own, but this is controlled by the <a href="#modifiers">modifiers</a> setting instead.
        <h1 id="license">License</h1>
        Vieb is created by <a href="https://github.com/Jelmerro">Jelmer van Arnhem</a>
        and <a href="https://github.com/Jelmerro/Vieb/graphs/contributors">contributors</a>.
        The source files contain the license headers with the individual authors.
        You can copy or modify the code/program under the terms of the GPL3.0 or later versions.
        For more information and legal terms see the
        <a href="https://github.com/Jelmerro/Vieb/blob/master/LICENSE">LICENSE</a>.
        All the links in this paragraph connect to some part of the
        <a href="https://github.com/Jelmerro/Vieb">Github repo</a>.
        Vieb also uses third-party libraries, which are covered by different licenses.
        See the mentions in the chapter below for links and other info.
        <h1 id="mentions">Mentions</h1>
        Besides the many awesome <a href="https://github.com/Jelmerro/Vieb/graphs/contributors">contributors</a>,
        the projects below have been an essential part in making Vieb what it is today.
        <ul>
            <li>
                <a href="https://github.com/vim/vim">Vim</a>
                for being such a fantastic editor and an inspiration for Vieb
            </li>
            <li>
                <a href="https://github.com/electron/electron">Electron</a>
                is used to browse, display and interact with websites
            </li>
            <li>
                <a href="https://github.com/eslint/eslint">Eslint</a>
                is used to write consistently styled code for Vieb
            </li>
            <li>
                <a href="https://github.com/electron-userland/electron-builder">Electron builder</a>
                is used to provide users with executable builds
            </li>
            <li>
                <a href="https://github.com/ghostery/adblocker">Cliqz/Ghostery adblocker</a>
                is used to block ads and trackers when browsing
            </li>
            <li>
                <a href="https://github.com/easylist/easylist">Easylist</a>
                is also used to block ads and trackers when browsing
            </li>
            <li>
                <a href="https://github.com/uBlockOrigin/uAssets">uAssets</a>
                is also used to block ads and trackers when browsing
            </li>
            <li>
                <a href="https://github.com/henrypp/chrlauncher">Chrlauncher</a>
                is used to set Vieb as the default browser on Windows
            </li>
            <li>
                <a href="https://github.com/highlightjs/highlight.js">Highlight.js</a>
                is used to view the source code of resources with syntax highlighting
            </li>
            <li>
                <a href="https://github.com/mozilla/readability">Readability</a>
                is used to extract content from the page to generate the readerview
            </li>
            <li>
                <a href="https://github.com/darkreader/darkreader">Darkreader</a>
                is used to style external websites in a consistent dark look
            </li>
            <li>
                <a href="https://github.com/markedjs/marked">Marked</a>
                is used to extract content from the page to generate the markdownviewer
            </li>
        </ul>
        Thanks to all the people involved for making Vieb possible.
    </main>
</body>
</html>
